From e81fba22edb5712913da26f05ae4b0aedd1e87c9 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Mon, 26 Feb 2018 13:43:35 -0800 Subject: [PATCH 01/20] EntityServer should update a previously matched entity. EntityServer currently keeps a per-Node set of entities that matched the JSON filter. This commit will send an update for an entity that no longer matches then remove it from the set. https://highfidelity.fogbugz.com/f/cases/11244/ --- .../src/entities/EntityTreeSendThread.cpp | 14 +++++++++++--- libraries/entities/src/EntityNodeData.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/assignment-client/src/entities/EntityTreeSendThread.cpp b/assignment-client/src/entities/EntityTreeSendThread.cpp index e5cee84f1b..94d21f1c9a 100644 --- a/assignment-client/src/entities/EntityTreeSendThread.cpp +++ b/assignment-client/src/entities/EntityTreeSendThread.cpp @@ -442,12 +442,16 @@ bool EntityTreeSendThread::traverseTreeAndBuildNextPacketPayload(EncodeBitstream PrioritizedEntity queuedItem = _sendQueue.top(); EntityItemPointer entity = queuedItem.getEntity(); if (entity) { - // Only send entities that match the jsonFilters, but keep track of everything we've tried to send so we don't try to send it again + const QUuid& entityID = entity->getID(); + // Only send entities that match the jsonFilters, but keep track of everything we've tried to send so we don't try to send it again; + // also send if we previously matched since this represents change to a matched item. bool entityMatchesFilters = entity->matchesJSONFilters(jsonFilters); - if (entityMatchesFilters || entityNodeData->isEntityFlaggedAsExtra(entity->getID())) { + bool entityPreviouslyMatchedFilter = entityNodeData->sentFilteredEntity(entityID); + + if (entityMatchesFilters || entityNodeData->isEntityFlaggedAsExtra(entityID) || entityPreviouslyMatchedFilter) { if (!jsonFilters.isEmpty() && entityMatchesFilters) { // Record explicitly filtered-in entity so that extra entities can be flagged. - entityNodeData->insertSentFilteredEntity(entity->getID()); + entityNodeData->insertSentFilteredEntity(entityID); } OctreeElement::AppendState appendEntityState = entity->appendEntityData(&_packetData, params, _extraEncodeData); @@ -458,6 +462,10 @@ bool EntityTreeSendThread::traverseTreeAndBuildNextPacketPayload(EncodeBitstream params.stopReason = EncodeBitstreamParams::DIDNT_FIT; break; } + + if (entityPreviouslyMatchedFilter && !entityMatchesFilters) { + entityNodeData->removeSentFilteredEntity(entityID); + } ++_numEntities; } if (queuedItem.shouldForceRemove()) { diff --git a/libraries/entities/src/EntityNodeData.h b/libraries/entities/src/EntityNodeData.h index eb5a1610cc..090a5e0526 100644 --- a/libraries/entities/src/EntityNodeData.h +++ b/libraries/entities/src/EntityNodeData.h @@ -33,7 +33,7 @@ public: // these can only be called from the OctreeSendThread for the given Node void insertSentFilteredEntity(const QUuid& entityID) { _sentFilteredEntities.insert(entityID); } void removeSentFilteredEntity(const QUuid& entityID) { _sentFilteredEntities.remove(entityID); } - bool sentFilteredEntity(const QUuid& entityID) { return _sentFilteredEntities.contains(entityID); } + bool sentFilteredEntity(const QUuid& entityID) const { return _sentFilteredEntities.contains(entityID); } QSet getSentFilteredEntities() { return _sentFilteredEntities; } // the following flagged extra entity methods can only be called from the OctreeSendThread for the given Node From 747a6b07ceeb55148edb8bdd807e01a1c19f982e Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 8 Mar 2018 11:19:49 -0800 Subject: [PATCH 02/20] Fix font loading for MacOS via different font loading method --- interface/resources/qml/CurrentAPI.qml | 2 -- .../resources/qml/controls-uit/CheckBoxQQC2.qml | 4 ++-- interface/resources/qml/controls-uit/Keyboard.qml | 9 +++------ interface/resources/qml/controls-uit/SpinBox.qml | 3 +-- interface/resources/qml/controls-uit/TextEdit.qml | 6 +++--- interface/resources/qml/controls-uit/TextField.qml | 4 +--- interface/resources/qml/controls/FontAwesome.qml | 3 +-- interface/resources/qml/dialogs/FileDialog.qml | 5 +---- interface/resources/qml/dialogs/TabletFileDialog.qml | 5 +---- .../qml/dialogs/assetDialog/AssetDialogContent.qml | 5 +---- interface/resources/qml/hifi/AssetServer.qml | 10 ++++++---- interface/resources/qml/hifi/ComboDialog.qml | 2 -- .../resources/qml/hifi/DesktopLetterboxMessage.qml | 7 +++---- interface/resources/qml/hifi/LetterboxMessage.qml | 7 +++---- interface/resources/qml/hifi/NameCard.qml | 3 +-- interface/resources/qml/hifi/Pal.qml | 3 +-- .../commerce/common/EmulatedMarketplaceHeader.qml | 3 +-- .../qml/hifi/commerce/wallet/sendMoney/SendMoney.qml | 5 ++--- .../resources/qml/hifi/dialogs/TabletAssetServer.qml | 12 +++++++----- .../hifi/tablet/tabletWindows/TabletFileDialog.qml | 5 +---- .../resources/qml/styles-uit/AnonymousProRegular.qml | 3 +-- .../resources/qml/styles-uit/FiraSansRegular.qml | 3 +-- .../resources/qml/styles-uit/FiraSansSemiBold.qml | 3 +-- interface/resources/qml/styles-uit/HiFiGlyphs.qml | 3 +-- interface/resources/qml/styles-uit/RalewayBold.qml | 5 ++--- interface/resources/qml/styles-uit/RalewayLight.qml | 3 +-- .../resources/qml/styles-uit/RalewayRegular.qml | 3 +-- .../resources/qml/styles-uit/RalewaySemiBold.qml | 4 ++-- interface/src/Application.cpp | 9 +++++++++ 29 files changed, 58 insertions(+), 81 deletions(-) diff --git a/interface/resources/qml/CurrentAPI.qml b/interface/resources/qml/CurrentAPI.qml index 37984965d9..96bfb5c36b 100644 --- a/interface/resources/qml/CurrentAPI.qml +++ b/interface/resources/qml/CurrentAPI.qml @@ -33,8 +33,6 @@ Item { width: parent.width height: parent.height } - - FontLoader { id: ralewayRegular; source: pathToFonts + "fonts/Raleway-Regular.ttf"; } Timer { id: updateList diff --git a/interface/resources/qml/controls-uit/CheckBoxQQC2.qml b/interface/resources/qml/controls-uit/CheckBoxQQC2.qml index 12b8c80003..8a9686ff5e 100644 --- a/interface/resources/qml/controls-uit/CheckBoxQQC2.qml +++ b/interface/resources/qml/controls-uit/CheckBoxQQC2.qml @@ -109,9 +109,9 @@ CheckBox { contentItem: Text { id: root - FontLoader { id: ralewaySemiBold; source: pathToFonts + "fonts/Raleway-SemiBold.ttf"; } font.pixelSize: hifi.fontSizes.inputLabel - font.family: ralewaySemiBold.name + font.family: "Raleway" + font.weight: Font.DemiBold text: checkBox.text color: checkBox.color x: 2 diff --git a/interface/resources/qml/controls-uit/Keyboard.qml b/interface/resources/qml/controls-uit/Keyboard.qml index 76b66178d4..ea76d44aaa 100644 --- a/interface/resources/qml/controls-uit/Keyboard.qml +++ b/interface/resources/qml/controls-uit/Keyboard.qml @@ -125,8 +125,7 @@ Rectangle { TextInput { id: mirrorText visible: showMirrorText - FontLoader { id: font; source: "../../fonts/FiraSans-Regular.ttf"; } - font.family: font.name + font.family: "Fira Sans" font.pixelSize: 20 verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter @@ -165,8 +164,6 @@ Rectangle { anchors.bottom: parent.bottom anchors.bottomMargin: 0 - FontLoader { id: hiFiGlyphs; source: pathToFonts + "fonts/hifi-glyphs.ttf"; } - Column { id: columnAlpha width: keyboardWidth @@ -250,7 +247,7 @@ Rectangle { Key { width: 43; glyph: ","; } Key { width: 43; glyph: "."; } Key { - fontFamily: hiFiGlyphs.name; + fontFamily: "hifi-glyphs"; fontPixelSize: 48; letterAnchors.topMargin: -4; verticalAlignment: Text.AlignVCenter; @@ -343,7 +340,7 @@ Rectangle { Key { width: 43; glyph: ","; } Key { width: 43; glyph: "."; } Key { - fontFamily: hiFiGlyphs.name; + fontFamily: "hifi-glyphs"; fontPixelSize: 48; letterAnchors.topMargin: -4; verticalAlignment: Text.AlignVCenter; diff --git a/interface/resources/qml/controls-uit/SpinBox.qml b/interface/resources/qml/controls-uit/SpinBox.qml index a1237d4bc7..30f6682d5a 100644 --- a/interface/resources/qml/controls-uit/SpinBox.qml +++ b/interface/resources/qml/controls-uit/SpinBox.qml @@ -25,8 +25,7 @@ SpinBox { property color colorLabelInside: hifi.colors.white property real controlHeight: height + (spinBoxLabel.visible ? spinBoxLabel.height + spinBoxLabel.anchors.bottomMargin : 0) - FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } - font.family: firaSansSemiBold.name + font.family: "Fira Sans SemiBold" font.pixelSize: hifi.fontSizes.textFieldInput height: hifi.fontSizes.textFieldInput + 13 // Match height of TextField control. diff --git a/interface/resources/qml/controls-uit/TextEdit.qml b/interface/resources/qml/controls-uit/TextEdit.qml index 5ee9ce94ba..0fe03150f4 100644 --- a/interface/resources/qml/controls-uit/TextEdit.qml +++ b/interface/resources/qml/controls-uit/TextEdit.qml @@ -16,9 +16,9 @@ import "../styles-uit" TextEdit { property real size: 32 - - FontLoader { id: ralewaySemiBold; source: "../../fonts/Raleway-SemiBold.ttf"; } - font.family: ralewaySemiBold.name + + font.family: "Raleway" + font.weight: Font.DemiBold font.pointSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft diff --git a/interface/resources/qml/controls-uit/TextField.qml b/interface/resources/qml/controls-uit/TextField.qml index 3fc5d83129..782ab454b5 100644 --- a/interface/resources/qml/controls-uit/TextField.qml +++ b/interface/resources/qml/controls-uit/TextField.qml @@ -34,9 +34,7 @@ TextField { placeholderText: textField.placeholderText - FontLoader { id: firaSansRegular; source: "../../fonts/FiraSans-Regular.ttf"; } - FontLoader { id: hifiGlyphs; source: "../../fonts/hifi-glyphs.ttf"; } - font.family: firaSansRegular.name + font.family: "Fira Sans" font.pixelSize: hifi.fontSizes.textFieldInput height: implicitHeight + 3 // Make surrounding box higher so that highlight is vertically centered. property alias textFieldLabel: textFieldLabel diff --git a/interface/resources/qml/controls/FontAwesome.qml b/interface/resources/qml/controls/FontAwesome.qml index 50d7e96fb5..2c897b6347 100644 --- a/interface/resources/qml/controls/FontAwesome.qml +++ b/interface/resources/qml/controls/FontAwesome.qml @@ -4,13 +4,12 @@ import QtQuick.Controls.Styles 1.3 Text { id: root - FontLoader { id: iconFont; source: "../../fonts/fontawesome-webfont.ttf"; } property int size: 32 width: size height: size font.pixelSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: iconFont.name + font.family: "FontAwesome" } diff --git a/interface/resources/qml/dialogs/FileDialog.qml b/interface/resources/qml/dialogs/FileDialog.qml index 0b5da8a5f5..572e7a7918 100644 --- a/interface/resources/qml/dialogs/FileDialog.qml +++ b/interface/resources/qml/dialogs/FileDialog.qml @@ -532,9 +532,6 @@ ModalWindow { itemDelegate: Item { clip: true - FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } - FontLoader { id: firaSansRegular; source: "../../fonts/FiraSans-Regular.ttf"; } - FiraSansSemiBold { text: getText(); elide: styleData.elideMode @@ -548,7 +545,7 @@ ModalWindow { size: hifi.fontSizes.tableText color: hifi.colors.baseGrayHighlight font.family: (styleData.row !== -1 && fileTableView.model.get(styleData.row).fileIsDir) - ? firaSansSemiBold.name : firaSansRegular.name + ? "Fira Sans SemiBold" : "Fira Sans" function getText() { if (styleData.row === -1) { diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml index d3b738469e..c635095ac6 100644 --- a/interface/resources/qml/dialogs/TabletFileDialog.qml +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -496,9 +496,6 @@ TabletModalWindow { itemDelegate: Item { clip: true - //FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } - //FontLoader { id: firaSansRegular; source: "../../fonts/FiraSans-Regular.ttf"; } - FiraSansSemiBold { text: getText(); elide: styleData.elideMode @@ -512,7 +509,7 @@ TabletModalWindow { size: hifi.fontSizes.tableText color: hifi.colors.baseGrayHighlight //font.family: (styleData.row !== -1 && fileTableView.model.get(styleData.row).fileIsDir) - //? firaSansSemiBold.name : firaSansRegular.name + //? "Fira Sans SemiBold" : "Fira Sans" function getText() { if (styleData.row === -1) { diff --git a/interface/resources/qml/dialogs/assetDialog/AssetDialogContent.qml b/interface/resources/qml/dialogs/assetDialog/AssetDialogContent.qml index 8c0501e3b4..84f4c694ff 100644 --- a/interface/resources/qml/dialogs/assetDialog/AssetDialogContent.qml +++ b/interface/resources/qml/dialogs/assetDialog/AssetDialogContent.qml @@ -345,9 +345,6 @@ Item { itemDelegate: Item { clip: true - FontLoader { id: firaSansSemiBold; source: "../../../fonts/FiraSans-SemiBold.ttf"; } - FontLoader { id: firaSansRegular; source: "../../../fonts/FiraSans-Regular.ttf"; } - FiraSansSemiBold { text: styleData.value elide: styleData.elideMode @@ -361,7 +358,7 @@ Item { size: hifi.fontSizes.tableText color: hifi.colors.baseGrayHighlight font.family: (styleData.row !== -1 && assetTableView.model.get(styleData.row).fileIsDir) - ? firaSansSemiBold.name : firaSansRegular.name + ? "Fira Sans SemiBold" : "Fira Sans" } } diff --git a/interface/resources/qml/hifi/AssetServer.qml b/interface/resources/qml/hifi/AssetServer.qml index fea275999e..34be11d4df 100644 --- a/interface/resources/qml/hifi/AssetServer.qml +++ b/interface/resources/qml/hifi/AssetServer.qml @@ -187,9 +187,10 @@ Windows.ScrollingWindow { var textures = JSON.stringify({ "tex.picture": defaultURL}); var shapeType = "box"; var dynamic = false; + var collisionless = true; var position = Vec3.sum(MyAvatar.position, Vec3.multiply(2, Quat.getForward(MyAvatar.orientation))); var gravity = Vec3.multiply(Vec3.fromPolar(Math.PI / 2, 0), 0); - Entities.addModelEntity(name, modelURL, textures, shapeType, dynamic, position, gravity); + Entities.addModelEntity(name, modelURL, textures, shapeType, dynamic, collisionless, position, gravity); } else { var SHAPE_TYPE_NONE = 0; var SHAPE_TYPE_SIMPLE_HULL = 1; @@ -234,6 +235,7 @@ Windows.ScrollingWindow { var result = JSON.parse(jsonResult); var url = result.textInput.trim(); var shapeType; + var collisionless = false; switch (result.comboBox) { case SHAPE_TYPE_SIMPLE_HULL: shapeType = "simple-hull"; @@ -252,6 +254,7 @@ Windows.ScrollingWindow { break; default: shapeType = "none"; + collisionless = true; } var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; @@ -273,7 +276,7 @@ Windows.ScrollingWindow { print("Asset browser - adding asset " + url + " (" + name + ") to world."); // Entities.addEntity doesn't work from QML, so we use this. - Entities.addModelEntity(name, url, "", shapeType, dynamic, addPosition, gravity); + Entities.addModelEntity(name, url, "", shapeType, dynamic, collisionless, addPosition, gravity); } } }); @@ -657,8 +660,7 @@ Windows.ScrollingWindow { text: styleData.value - FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } - font.family: firaSansSemiBold.name + font.family: "Fira Sans SemiBold" font.pixelSize: hifi.fontSizes.textFieldInput height: hifi.dimensions.tableRowHeight diff --git a/interface/resources/qml/hifi/ComboDialog.qml b/interface/resources/qml/hifi/ComboDialog.qml index 83fcad18c7..06254bb7fb 100644 --- a/interface/resources/qml/hifi/ComboDialog.qml +++ b/interface/resources/qml/hifi/ComboDialog.qml @@ -25,8 +25,6 @@ Item { property int dialogHeight; property int comboOptionTextSize: 16; property int comboBodyTextSize: 16; - FontLoader { id: ralewayRegular; source: "../../fonts/Raleway-Regular.ttf"; } - FontLoader { id: ralewaySemiBold; source: "../../fonts/Raleway-SemiBold.ttf"; } visible: false; id: combo; anchors.fill: parent; diff --git a/interface/resources/qml/hifi/DesktopLetterboxMessage.qml b/interface/resources/qml/hifi/DesktopLetterboxMessage.qml index bafa518eb9..ede8590bfb 100644 --- a/interface/resources/qml/hifi/DesktopLetterboxMessage.qml +++ b/interface/resources/qml/hifi/DesktopLetterboxMessage.qml @@ -24,8 +24,6 @@ Item { property real headerTextMargin: -5 property real headerGlyphMargin: -15 property bool isDesktop: false - FontLoader { id: ralewayRegular; source: "../../fonts/Raleway-Regular.ttf"; } - FontLoader { id: ralewaySemiBold; source: "../../fonts/Raleway-SemiBold.ttf"; } visible: false id: letterbox anchors.fill: parent @@ -78,7 +76,8 @@ Item { // Text Size font.pixelSize: headerTextPixelSize // Style - font.family: ralewaySemiBold.name + font.family: "Raleway" + font.weight: Font.DemiBold color: hifi.colors.darkGray horizontalAlignment: Text.AlignHLeft verticalAlignment: Text.AlignVCenter @@ -101,7 +100,7 @@ Item { horizontalAlignment: Text.AlignHLeft // Style font.pixelSize: popupTextPixelSize - font.family: ralewayRegular.name + font.family: "Raleway" color: hifi.colors.darkGray wrapMode: Text.WordWrap textFormat: Text.StyledText diff --git a/interface/resources/qml/hifi/LetterboxMessage.qml b/interface/resources/qml/hifi/LetterboxMessage.qml index 7ce66adf11..0e9ce89ddb 100644 --- a/interface/resources/qml/hifi/LetterboxMessage.qml +++ b/interface/resources/qml/hifi/LetterboxMessage.qml @@ -23,8 +23,6 @@ Item { property real popupTextPixelSize: 16 property real headerTextMargin: -5 property real headerGlyphMargin: -15 - FontLoader { id: ralewayRegular; source: "../../fonts/Raleway-Regular.ttf"; } - FontLoader { id: ralewaySemiBold; source: "../../fonts/Raleway-SemiBold.ttf"; } visible: false id: letterbox anchors.fill: parent @@ -82,7 +80,8 @@ Item { // Text Size font.pixelSize: headerTextPixelSize // Style - font.family: ralewaySemiBold.name + font.family: "Raleway" + font.weight: Font.DemiBold color: hifi.colors.darkGray horizontalAlignment: Text.AlignHLeft verticalAlignment: Text.AlignVCenter @@ -127,7 +126,7 @@ Item { horizontalAlignment: Text.AlignHLeft // Style font.pixelSize: popupTextPixelSize - font.family: ralewayRegular.name + font.family: "Raleway" color: hifi.colors.darkGray wrapMode: Text.WordWrap textFormat: Text.StyledText diff --git a/interface/resources/qml/hifi/NameCard.qml b/interface/resources/qml/hifi/NameCard.qml index e08fdc53ff..c97a802f10 100644 --- a/interface/resources/qml/hifi/NameCard.qml +++ b/interface/resources/qml/hifi/NameCard.qml @@ -177,8 +177,7 @@ Item { anchors.right: parent.right anchors.rightMargin: editGlyph.width + editGlyph.anchors.rightMargin // Style - FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } - font.family: firaSansSemiBold.name + font.family: "Fira Sans SemiBold" font.pixelSize: displayNameTextPixelSize selectionColor: hifi.colors.blueAccent selectedTextColor: "black" diff --git a/interface/resources/qml/hifi/Pal.qml b/interface/resources/qml/hifi/Pal.qml index 8fb27714ee..d779b4ba42 100644 --- a/interface/resources/qml/hifi/Pal.qml +++ b/interface/resources/qml/hifi/Pal.qml @@ -908,7 +908,6 @@ Rectangle { anchors.horizontalCenter: parent.horizontalCenter; } - FontLoader { id: ralewayRegular; source: "../../fonts/Raleway-Regular.ttf"; } Text { id: connectionHelpText; // Anchors @@ -923,7 +922,7 @@ Rectangle { horizontalAlignment: Text.AlignHLeft // Style font.pixelSize: 18; - font.family: ralewayRegular.name + font.family: "Raleway" color: hifi.colors.darkGray wrapMode: Text.WordWrap textFormat: Text.StyledText; diff --git a/interface/resources/qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml b/interface/resources/qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml index eb8159a4e7..8a7e809b3d 100644 --- a/interface/resources/qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml +++ b/interface/resources/qml/hifi/commerce/common/EmulatedMarketplaceHeader.qml @@ -141,10 +141,9 @@ Item { } } - FontLoader { id: ralewayRegular; source: "../../../../fonts/Raleway-Regular.ttf"; } TextMetrics { id: textMetrics; - font.family: ralewayRegular.name + font.family: "Raleway" text: usernameText.text; } diff --git a/interface/resources/qml/hifi/commerce/wallet/sendMoney/SendMoney.qml b/interface/resources/qml/hifi/commerce/wallet/sendMoney/SendMoney.qml index f5b7f42a3f..d0aa89923f 100644 --- a/interface/resources/qml/hifi/commerce/wallet/sendMoney/SendMoney.qml +++ b/interface/resources/qml/hifi/commerce/wallet/sendMoney/SendMoney.qml @@ -924,14 +924,13 @@ Item { anchors.right: parent.right; anchors.rightMargin: 20; height: 95; - - FontLoader { id: firaSansSemiBold; source: "../../../../../fonts/FiraSans-SemiBold.ttf"; } + TextArea { id: optionalMessage; property int maximumLength: 72; property string previousText: text; placeholderText: "Optional Public Message (" + maximumLength + " character limit)"; - font.family: firaSansSemiBold.name; + font.family: "Fira Sans SemiBold"; font.pixelSize: 20; // Anchors anchors.fill: parent; diff --git a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml index 19297a3251..a85e5d4498 100644 --- a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml +++ b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml @@ -144,7 +144,7 @@ Rectangle { } function canAddToWorld(path) { - var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i]; + var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i, /\.jpg\b/i, /\.png\b/i]; if (selectedItemCount > 1) { return false; @@ -188,9 +188,10 @@ Rectangle { var textures = JSON.stringify({ "tex.picture": defaultURL}); var shapeType = "box"; var dynamic = false; + var collisionless = true; var position = Vec3.sum(MyAvatar.position, Vec3.multiply(2, Quat.getForward(MyAvatar.orientation))); var gravity = Vec3.multiply(Vec3.fromPolar(Math.PI / 2, 0), 0); - Entities.addModelEntity(name, modelURL, textures, shapeType, dynamic, position, gravity); + Entities.addModelEntity(name, modelURL, textures, shapeType, dynamic, collisionless, position, gravity); } else { var SHAPE_TYPE_NONE = 0; var SHAPE_TYPE_SIMPLE_HULL = 1; @@ -235,6 +236,7 @@ Rectangle { var result = JSON.parse(jsonResult); var url = result.textInput.trim(); var shapeType; + var collisionless = false; switch (result.comboBox) { case SHAPE_TYPE_SIMPLE_HULL: shapeType = "simple-hull"; @@ -253,6 +255,7 @@ Rectangle { break; default: shapeType = "none"; + collisionless = true; } var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; @@ -274,7 +277,7 @@ Rectangle { print("Asset browser - adding asset " + url + " (" + name + ") to world."); // Entities.addEntity doesn't work from QML, so we use this. - Entities.addModelEntity(name, url, "", shapeType, dynamic, addPosition, gravity); + Entities.addModelEntity(name, url, "", shapeType, dynamic, collisionless, addPosition, gravity); } } }); @@ -656,8 +659,7 @@ Rectangle { text: styleData.value - FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } - font.family: firaSansSemiBold.name + font.family: "Fira Sans SemiBold" font.pixelSize: hifi.fontSizes.textFieldInput height: hifi.dimensions.tableRowHeight diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml index 7b91cfeba9..08b0104fce 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml @@ -478,9 +478,6 @@ Rectangle { itemDelegate: Item { clip: true - //FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } - //FontLoader { id: firaSansRegular; source: "../../fonts/FiraSans-Regular.ttf"; } - FiraSansSemiBold { text: getText(); elide: styleData.elideMode @@ -494,7 +491,7 @@ Rectangle { size: hifi.fontSizes.tableText color: hifi.colors.baseGrayHighlight //font.family: (styleData.row !== -1 && fileTableView.model.get(styleData.row).fileIsDir) - //? firaSansSemiBold.name : firaSansRegular.name + //? "Fira Sans SemiBold" : "Fira Sans" function getText() { if (styleData.row === -1) { diff --git a/interface/resources/qml/styles-uit/AnonymousProRegular.qml b/interface/resources/qml/styles-uit/AnonymousProRegular.qml index 789689973b..d7e13423b6 100644 --- a/interface/resources/qml/styles-uit/AnonymousProRegular.qml +++ b/interface/resources/qml/styles-uit/AnonymousProRegular.qml @@ -14,10 +14,9 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: anonymousProRegular; source: "../../fonts/AnonymousPro-Regular.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: anonymousProRegular.name + font.family: "Anonymous Pro" } diff --git a/interface/resources/qml/styles-uit/FiraSansRegular.qml b/interface/resources/qml/styles-uit/FiraSansRegular.qml index 4ae0826772..1166fa5cba 100644 --- a/interface/resources/qml/styles-uit/FiraSansRegular.qml +++ b/interface/resources/qml/styles-uit/FiraSansRegular.qml @@ -14,10 +14,9 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: firaSansRegular; source: "../../fonts/FiraSans-Regular.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: firaSansRegular.name + font.family: "Fira Sans" } diff --git a/interface/resources/qml/styles-uit/FiraSansSemiBold.qml b/interface/resources/qml/styles-uit/FiraSansSemiBold.qml index b3f3324090..2f095c57a6 100644 --- a/interface/resources/qml/styles-uit/FiraSansSemiBold.qml +++ b/interface/resources/qml/styles-uit/FiraSansSemiBold.qml @@ -14,10 +14,9 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: firaSansSemiBold; source: pathToFonts + "fonts/FiraSans-SemiBold.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: firaSansSemiBold.name + font.family: "Fira Sans SemiBold" } diff --git a/interface/resources/qml/styles-uit/HiFiGlyphs.qml b/interface/resources/qml/styles-uit/HiFiGlyphs.qml index f78d6c6f59..07f0212f0c 100644 --- a/interface/resources/qml/styles-uit/HiFiGlyphs.qml +++ b/interface/resources/qml/styles-uit/HiFiGlyphs.qml @@ -12,12 +12,11 @@ import QtQuick 2.5 Text { id: root - FontLoader { id: hiFiGlyphs; source: pathToFonts + "fonts/hifi-glyphs.ttf"; } property int size: 32 font.pixelSize: size width: size height: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: hiFiGlyphs.name + font.family: "hifi-glyphs" } diff --git a/interface/resources/qml/styles-uit/RalewayBold.qml b/interface/resources/qml/styles-uit/RalewayBold.qml index 433fdb7ae6..5f42ecd90b 100644 --- a/interface/resources/qml/styles-uit/RalewayBold.qml +++ b/interface/resources/qml/styles-uit/RalewayBold.qml @@ -14,11 +14,10 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: ralewayBold; source: pathToFonts + "fonts/Raleway-Bold.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: ralewayBold.name - font.bold: true // Font seems to need this in order to display bold. + font.family: "Raleway" + font.bold: true } diff --git a/interface/resources/qml/styles-uit/RalewayLight.qml b/interface/resources/qml/styles-uit/RalewayLight.qml index 913918afd7..e6b12fca9c 100644 --- a/interface/resources/qml/styles-uit/RalewayLight.qml +++ b/interface/resources/qml/styles-uit/RalewayLight.qml @@ -14,10 +14,9 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: ralewayLight; source: "../../fonts/Raleway-Light.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: ralewayLight.name + font.family: "Raleway Light" } diff --git a/interface/resources/qml/styles-uit/RalewayRegular.qml b/interface/resources/qml/styles-uit/RalewayRegular.qml index aab31ecf33..5c9b87dc8a 100644 --- a/interface/resources/qml/styles-uit/RalewayRegular.qml +++ b/interface/resources/qml/styles-uit/RalewayRegular.qml @@ -14,10 +14,9 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: ralewayRegular; source: pathToFonts + "fonts/Raleway-Regular.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: ralewayRegular.name + font.family: "Raleway" } diff --git a/interface/resources/qml/styles-uit/RalewaySemiBold.qml b/interface/resources/qml/styles-uit/RalewaySemiBold.qml index b6c79e02a4..0b25f900bc 100644 --- a/interface/resources/qml/styles-uit/RalewaySemiBold.qml +++ b/interface/resources/qml/styles-uit/RalewaySemiBold.qml @@ -14,10 +14,10 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: ralewaySemiBold; source: pathToFonts + "fonts/Raleway-SemiBold.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft - font.family: ralewaySemiBold.name + font.family: "Raleway" + font.weight: Font.DemiBold } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 429348c593..15f772b02a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -978,6 +978,15 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo qInstallMessageHandler(messageHandler); QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "styles/Inconsolata.otf"); + QFontDatabase::addApplicationFont(":/fonts/fontawesome-webfont.ttf"); + QFontDatabase::addApplicationFont(":/fonts/hifi-glyphs.ttf"); + QFontDatabase::addApplicationFont(":/fonts/AnonymousPro-Regular.ttf"); + QFontDatabase::addApplicationFont(":/fonts/FiraSans-Regular.ttf"); + QFontDatabase::addApplicationFont(":/fonts/FiraSans-SemiBold.ttf"); + QFontDatabase::addApplicationFont(":/fonts/Raleway-Light.ttf"); + QFontDatabase::addApplicationFont(":/fonts/Raleway-Regular.ttf"); + QFontDatabase::addApplicationFont(":/fonts/Raleway-Bold.ttf"); + QFontDatabase::addApplicationFont(":/fonts/Raleway-SemiBold.ttf"); _window->setWindowTitle("High Fidelity Interface"); Model::setAbstractViewStateInterface(this); // The model class will sometimes need to know view state details from us From ec6f66ee521631525f00c31931be64c313d24898 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 8 Mar 2018 13:51:34 -0800 Subject: [PATCH 03/20] Try this --- interface/src/Application.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 15f772b02a..a25c9e43cb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -978,15 +978,15 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo qInstallMessageHandler(messageHandler); QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "styles/Inconsolata.otf"); - QFontDatabase::addApplicationFont(":/fonts/fontawesome-webfont.ttf"); - QFontDatabase::addApplicationFont(":/fonts/hifi-glyphs.ttf"); - QFontDatabase::addApplicationFont(":/fonts/AnonymousPro-Regular.ttf"); - QFontDatabase::addApplicationFont(":/fonts/FiraSans-Regular.ttf"); - QFontDatabase::addApplicationFont(":/fonts/FiraSans-SemiBold.ttf"); - QFontDatabase::addApplicationFont(":/fonts/Raleway-Light.ttf"); - QFontDatabase::addApplicationFont(":/fonts/Raleway-Regular.ttf"); - QFontDatabase::addApplicationFont(":/fonts/Raleway-Bold.ttf"); - QFontDatabase::addApplicationFont(":/fonts/Raleway-SemiBold.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/fontawesome-webfont.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/hifi-glyphs.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/AnonymousPro-Regular.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/FiraSans-Regular.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/FiraSans-SemiBold.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/Raleway-Light.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/Raleway-Regular.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/Raleway-Bold.ttf"); + QFontDatabase::addApplicationFont(PathUtils::resourcesPath() + "fonts/Raleway-SemiBold.ttf"); _window->setWindowTitle("High Fidelity Interface"); Model::setAbstractViewStateInterface(this); // The model class will sometimes need to know view state details from us From 883528488cde5c3acc41c23a2c289065a70aa121 Mon Sep 17 00:00:00 2001 From: howard-stearns Date: Thu, 8 Mar 2018 14:24:44 -0800 Subject: [PATCH 04/20] clear wallet when picking a new one --- .../qml/hifi/commerce/wallet/Wallet.qml | 3 ++- interface/src/commerce/QmlCommerce.cpp | 5 ++++ interface/src/commerce/QmlCommerce.h | 1 + interface/src/commerce/Wallet.cpp | 24 +++++++++++-------- interface/src/commerce/Wallet.h | 3 ++- 5 files changed, 24 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml index 952390a7a4..1d5f749598 100644 --- a/interface/resources/qml/hifi/commerce/wallet/Wallet.qml +++ b/interface/resources/qml/hifi/commerce/wallet/Wallet.qml @@ -174,11 +174,12 @@ Rectangle { WalletChoice { id: walletChoice; proceedFunction: function (isReset) { - console.log(isReset ? "Reset wallet." : "Trying again with new wallet."); + console.log("WalletChoice", isReset ? "Reset wallet." : "Trying again with new wallet."); Commerce.setSoftReset(); if (isReset) { walletResetSetup(); } else { + Commerce.clearWallet(); var msg = { referrer: walletChoice.referrer } followReferrer(msg); } diff --git a/interface/src/commerce/QmlCommerce.cpp b/interface/src/commerce/QmlCommerce.cpp index 557193c074..53ec59049f 100644 --- a/interface/src/commerce/QmlCommerce.cpp +++ b/interface/src/commerce/QmlCommerce.cpp @@ -138,6 +138,11 @@ void QmlCommerce::setSoftReset() { wallet->setSoftReset(); } +void QmlCommerce::clearWallet() { + auto wallet = DependencyManager::get(); + wallet->clear(); +} + void QmlCommerce::setPassphrase(const QString& passphrase) { auto wallet = DependencyManager::get(); wallet->setPassphrase(passphrase); diff --git a/interface/src/commerce/QmlCommerce.h b/interface/src/commerce/QmlCommerce.h index 6a4eaa2be2..b4af4393e3 100644 --- a/interface/src/commerce/QmlCommerce.h +++ b/interface/src/commerce/QmlCommerce.h @@ -67,6 +67,7 @@ protected: Q_INVOKABLE void setPassphrase(const QString& passphrase); Q_INVOKABLE void changePassphrase(const QString& oldPassphrase, const QString& newPassphrase); Q_INVOKABLE void setSoftReset(); + Q_INVOKABLE void clearWallet(); Q_INVOKABLE void buy(const QString& assetId, int cost, const bool controlledFailure = false); Q_INVOKABLE void balance(); diff --git a/interface/src/commerce/Wallet.cpp b/interface/src/commerce/Wallet.cpp index fad82115d6..060f8de09b 100644 --- a/interface/src/commerce/Wallet.cpp +++ b/interface/src/commerce/Wallet.cpp @@ -343,19 +343,23 @@ Wallet::Wallet() { auto accountManager = DependencyManager::get(); connect(accountManager.data(), &AccountManager::usernameChanged, this, [&]() { getWalletStatus(); - _publicKeys.clear(); - - if (_securityImage) { - delete _securityImage; - } - _securityImage = nullptr; - - // tell the provider we got nothing - updateImageProvider(); - _passphrase->clear(); + clear(); }); } +void Wallet::clear() { + _publicKeys.clear(); + + if (_securityImage) { + delete _securityImage; + } + _securityImage = nullptr; + + // tell the provider we got nothing + updateImageProvider(); + _passphrase->clear(); +} + Wallet::~Wallet() { if (_securityImage) { delete _securityImage; diff --git a/interface/src/commerce/Wallet.h b/interface/src/commerce/Wallet.h index d771f404e5..8a7d6b8c07 100644 --- a/interface/src/commerce/Wallet.h +++ b/interface/src/commerce/Wallet.h @@ -49,8 +49,9 @@ public: bool getPassphraseIsCached() { return !(_passphrase->isEmpty()); } bool walletIsAuthenticatedWithPassphrase(); bool changePassphrase(const QString& newPassphrase); - void setSoftReset() { _isOverridingServer = true; } + void setSoftReset() { _isOverridingServer = true; } bool wasSoftReset() { bool was = _isOverridingServer; _isOverridingServer = false; return was; } + void clear(); void getWalletStatus(); enum WalletStatus { From c22d79041db348344ec3b16c3e9703410394ea29 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 8 Mar 2018 14:35:56 -0800 Subject: [PATCH 05/20] Cleanup after cherry-pick --- interface/resources/qml/hifi/AssetServer.qml | 7 ++----- .../resources/qml/hifi/dialogs/TabletAssetServer.qml | 9 +++------ 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/hifi/AssetServer.qml b/interface/resources/qml/hifi/AssetServer.qml index 34be11d4df..7a9e0707c1 100644 --- a/interface/resources/qml/hifi/AssetServer.qml +++ b/interface/resources/qml/hifi/AssetServer.qml @@ -187,10 +187,9 @@ Windows.ScrollingWindow { var textures = JSON.stringify({ "tex.picture": defaultURL}); var shapeType = "box"; var dynamic = false; - var collisionless = true; var position = Vec3.sum(MyAvatar.position, Vec3.multiply(2, Quat.getForward(MyAvatar.orientation))); var gravity = Vec3.multiply(Vec3.fromPolar(Math.PI / 2, 0), 0); - Entities.addModelEntity(name, modelURL, textures, shapeType, dynamic, collisionless, position, gravity); + Entities.addModelEntity(name, modelURL, textures, shapeType, dynamic, position, gravity); } else { var SHAPE_TYPE_NONE = 0; var SHAPE_TYPE_SIMPLE_HULL = 1; @@ -235,7 +234,6 @@ Windows.ScrollingWindow { var result = JSON.parse(jsonResult); var url = result.textInput.trim(); var shapeType; - var collisionless = false; switch (result.comboBox) { case SHAPE_TYPE_SIMPLE_HULL: shapeType = "simple-hull"; @@ -254,7 +252,6 @@ Windows.ScrollingWindow { break; default: shapeType = "none"; - collisionless = true; } var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; @@ -276,7 +273,7 @@ Windows.ScrollingWindow { print("Asset browser - adding asset " + url + " (" + name + ") to world."); // Entities.addEntity doesn't work from QML, so we use this. - Entities.addModelEntity(name, url, "", shapeType, dynamic, collisionless, addPosition, gravity); + Entities.addModelEntity(name, url, "", shapeType, dynamic, addPosition, gravity); } } }); diff --git a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml index a85e5d4498..a61241ff7c 100644 --- a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml +++ b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml @@ -144,7 +144,7 @@ Rectangle { } function canAddToWorld(path) { - var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i, /\.jpg\b/i, /\.png\b/i]; + var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i]; if (selectedItemCount > 1) { return false; @@ -188,10 +188,9 @@ Rectangle { var textures = JSON.stringify({ "tex.picture": defaultURL}); var shapeType = "box"; var dynamic = false; - var collisionless = true; var position = Vec3.sum(MyAvatar.position, Vec3.multiply(2, Quat.getForward(MyAvatar.orientation))); var gravity = Vec3.multiply(Vec3.fromPolar(Math.PI / 2, 0), 0); - Entities.addModelEntity(name, modelURL, textures, shapeType, dynamic, collisionless, position, gravity); + Entities.addModelEntity(name, modelURL, textures, shapeType, dynamic, position, gravity); } else { var SHAPE_TYPE_NONE = 0; var SHAPE_TYPE_SIMPLE_HULL = 1; @@ -236,7 +235,6 @@ Rectangle { var result = JSON.parse(jsonResult); var url = result.textInput.trim(); var shapeType; - var collisionless = false; switch (result.comboBox) { case SHAPE_TYPE_SIMPLE_HULL: shapeType = "simple-hull"; @@ -255,7 +253,6 @@ Rectangle { break; default: shapeType = "none"; - collisionless = true; } var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; @@ -277,7 +274,7 @@ Rectangle { print("Asset browser - adding asset " + url + " (" + name + ") to world."); // Entities.addEntity doesn't work from QML, so we use this. - Entities.addModelEntity(name, url, "", shapeType, dynamic, collisionless, addPosition, gravity); + Entities.addModelEntity(name, url, "", shapeType, dynamic, addPosition, gravity); } } }); From b427d6c326222ac8e7057b68c994ac368d79a20a Mon Sep 17 00:00:00 2001 From: Alexander Ivash Date: Thu, 8 Mar 2018 23:07:12 +0300 Subject: [PATCH 06/20] FB12956 - Audio Meter Toggle Button Broken --- .../qml/{AvatarInputs.qml => AvatarInputsBar.qml} | 6 +++--- interface/src/Application.cpp | 7 ++++++- interface/src/ui/AvatarInputs.cpp | 7 ++----- interface/src/ui/AvatarInputs.h | 4 ++-- 4 files changed, 13 insertions(+), 11 deletions(-) rename interface/resources/qml/{AvatarInputs.qml => AvatarInputsBar.qml} (88%) diff --git a/interface/resources/qml/AvatarInputs.qml b/interface/resources/qml/AvatarInputsBar.qml similarity index 88% rename from interface/resources/qml/AvatarInputs.qml rename to interface/resources/qml/AvatarInputsBar.qml index be4bf03465..a88a42080e 100644 --- a/interface/resources/qml/AvatarInputs.qml +++ b/interface/resources/qml/AvatarInputsBar.qml @@ -14,9 +14,9 @@ import Qt.labs.settings 1.0 import "./hifi/audio" as HifiAudio -Hifi.AvatarInputs { +Item { id: root; - objectName: "AvatarInputs" + objectName: "AvatarInputsBar" property int modality: Qt.NonModal width: audio.width; height: audio.height; @@ -26,7 +26,7 @@ Hifi.AvatarInputs { HifiAudio.MicBar { id: audio; - visible: root.showAudioTools; + visible: AvatarInputs.showAudioTools; standalone: true; dragTarget: parent; } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 429348c593..8fd43c95a6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2716,7 +2716,12 @@ void Application::onDesktopRootContextCreated(QQmlContext* surfaceContext) { void Application::onDesktopRootItemCreated(QQuickItem* rootItem) { Stats::show(); - AvatarInputs::show(); + auto surfaceContext = DependencyManager::get()->getSurfaceContext(); + surfaceContext->setContextProperty("Stats", Stats::getInstance()); + + auto offscreenUi = DependencyManager::get(); + auto qml = PathUtils::qmlUrl("AvatarInputsBar.qml"); + offscreenUi->show(qml, "AvatarInputsBar"); } void Application::updateCamera(RenderArgs& renderArgs, float deltaTime) { diff --git a/interface/src/ui/AvatarInputs.cpp b/interface/src/ui/AvatarInputs.cpp index fe79bec6ef..3053cb8855 100644 --- a/interface/src/ui/AvatarInputs.cpp +++ b/interface/src/ui/AvatarInputs.cpp @@ -16,22 +16,19 @@ #include "Application.h" #include "Menu.h" -HIFI_QML_DEF(AvatarInputs) - static AvatarInputs* INSTANCE{ nullptr }; Setting::Handle showAudioToolsSetting { QStringList { "AvatarInputs", "showAudioTools" }, false }; AvatarInputs* AvatarInputs::getInstance() { if (!INSTANCE) { - AvatarInputs::registerType(); + INSTANCE = new AvatarInputs(); Q_ASSERT(INSTANCE); } return INSTANCE; } -AvatarInputs::AvatarInputs(QQuickItem* parent) : QQuickItem(parent) { - INSTANCE = this; +AvatarInputs::AvatarInputs(QObject* parent) : QObject(parent) { _showAudioTools = showAudioToolsSetting.get(); } diff --git a/interface/src/ui/AvatarInputs.h b/interface/src/ui/AvatarInputs.h index fb48df9d73..47f520a639 100644 --- a/interface/src/ui/AvatarInputs.h +++ b/interface/src/ui/AvatarInputs.h @@ -19,7 +19,7 @@ public: \ private: \ type _##name{ initialValue }; -class AvatarInputs : public QQuickItem { +class AvatarInputs : public QObject { Q_OBJECT HIFI_QML_DECL @@ -32,7 +32,7 @@ class AvatarInputs : public QQuickItem { public: static AvatarInputs* getInstance(); Q_INVOKABLE float loudnessToAudioLevel(float loudness); - AvatarInputs(QQuickItem* parent = nullptr); + AvatarInputs(QObject* parent = nullptr); void update(); bool showAudioTools() const { return _showAudioTools; } From c06d28ee5fae9c69f1ebd558252fd878721e9fa1 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Sat, 10 Mar 2018 10:34:10 -0800 Subject: [PATCH 07/20] Improved quality of the audio resampling filter kernel --- libraries/audio/src/AudioSRCData.h | 1800 ++++++++++++++++------------ 1 file changed, 1028 insertions(+), 772 deletions(-) diff --git a/libraries/audio/src/AudioSRCData.h b/libraries/audio/src/AudioSRCData.h index 872a8b7ea9..4a51038683 100644 --- a/libraries/audio/src/AudioSRCData.h +++ b/libraries/audio/src/AudioSRCData.h @@ -294,786 +294,1042 @@ static const float prototypeFilterLQ[PROTOTYPE_COEFS_LQ] = { }; // Minimum-phase equiripple FIR lowpass -// taps = 96, phases = 32 +// taps = 128, phases = 32 // -// passband = 20.4khz @ 44.1khz sample rate -// stopband = 22.3khz @ 44.1khz sample rate +// passband = 20.8khz @ 44.1khz sample rate +// stopband = 22.25khz @ 44.1khz sample rate // passband ripple = +-0.01dB // stopband attn = -120dB (-60dB at Fs/2) // -static const int PROTOTYPE_TAPS_MQ = 96; // filter taps per phase +static const int PROTOTYPE_TAPS_MQ = 128; // filter taps per phase static const int PROTOTYPE_PHASES_MQ = 32; // oversampling factor static const int PROTOTYPE_COEFS_MQ = PROTOTYPE_TAPS_MQ * PROTOTYPE_PHASES_MQ; static const float prototypeFilterMQ[PROTOTYPE_COEFS_MQ] = { - 0.00000000e+00f, 2.66261387e-05f, 2.32573075e-05f, 3.40598514e-05f, - 4.71976232e-05f, 6.41453728e-05f, 8.54998397e-05f, 1.11687756e-04f, - 1.43801203e-04f, 1.82845116e-04f, 2.30066959e-04f, 2.86345358e-04f, - 3.53237802e-04f, 4.32445137e-04f, 5.25448765e-04f, 6.34181809e-04f, - 7.60751248e-04f, 9.07447815e-04f, 1.07664885e-03f, 1.27106372e-03f, - 1.49358697e-03f, 1.74743568e-03f, 2.03588950e-03f, 2.36271119e-03f, - 2.73178932e-03f, 3.14735017e-03f, 3.61394575e-03f, 4.13622717e-03f, - 4.71948430e-03f, 5.36900611e-03f, 6.09056802e-03f, 6.89015275e-03f, - 7.77420063e-03f, 8.74929355e-03f, 9.82247765e-03f, 1.10010827e-02f, - 1.22926302e-02f, 1.37050920e-02f, 1.52467086e-02f, 1.69259236e-02f, - 1.87515164e-02f, 2.07324611e-02f, 2.28780155e-02f, 2.51976248e-02f, - 2.77009067e-02f, 3.03976923e-02f, 3.32978310e-02f, 3.64113360e-02f, - 3.97483567e-02f, 4.33188718e-02f, 4.71330394e-02f, 5.12008208e-02f, - 5.55321084e-02f, 6.01366326e-02f, 6.50238954e-02f, 7.02031239e-02f, - 7.56832648e-02f, 8.14728338e-02f, 8.75798730e-02f, 9.40119584e-02f, - 1.00776061e-01f, 1.07878507e-01f, 1.15324915e-01f, 1.23120096e-01f, - 1.31268060e-01f, 1.39771791e-01f, 1.48633353e-01f, 1.57853754e-01f, - 1.67432845e-01f, 1.77369245e-01f, 1.87660373e-01f, 1.98302270e-01f, - 2.09289566e-01f, 2.20615469e-01f, 2.32271687e-01f, 2.44248375e-01f, - 2.56534006e-01f, 2.69115519e-01f, 2.81978070e-01f, 2.95105197e-01f, - 3.08478608e-01f, 3.22078299e-01f, 3.35882501e-01f, 3.49867623e-01f, - 3.64008344e-01f, 3.78277579e-01f, 3.92646502e-01f, 4.07084554e-01f, - 4.21559509e-01f, 4.36037587e-01f, 4.50483333e-01f, 4.64859851e-01f, - 4.79128834e-01f, 4.93250606e-01f, 5.07184249e-01f, 5.20887717e-01f, - 5.34317956e-01f, 5.47430992e-01f, 5.60182068e-01f, 5.72525885e-01f, - 5.84416587e-01f, 5.95808093e-01f, 6.06654109e-01f, 6.16908418e-01f, - 6.26525013e-01f, 6.35458287e-01f, 6.43663262e-01f, 6.51095737e-01f, - 6.57712516e-01f, 6.63471582e-01f, 6.68332383e-01f, 6.72255982e-01f, - 6.75205267e-01f, 6.77145171e-01f, 6.78042866e-01f, 6.77868024e-01f, - 6.76592912e-01f, 6.74192735e-01f, 6.70645661e-01f, 6.65933116e-01f, - 6.60039959e-01f, 6.52954537e-01f, 6.44668978e-01f, 6.35179268e-01f, - 6.24485354e-01f, 6.12591298e-01f, 5.99505382e-01f, 5.85240204e-01f, - 5.69812635e-01f, 5.53244046e-01f, 5.35560224e-01f, 5.16791389e-01f, - 4.96972230e-01f, 4.76141864e-01f, 4.54343785e-01f, 4.31625775e-01f, - 4.08039850e-01f, 3.83642160e-01f, 3.58492768e-01f, 3.32655624e-01f, - 3.06198278e-01f, 2.79191781e-01f, 2.51710369e-01f, 2.23831288e-01f, - 1.95634574e-01f, 1.67202627e-01f, 1.38620172e-01f, 1.09973678e-01f, - 8.13511972e-02f, 5.28420521e-02f, 2.45362976e-02f, -3.47536059e-03f, - -3.11022613e-02f, -5.82539130e-02f, -8.48404277e-02f, -1.10773085e-01f, - -1.35964505e-01f, -1.60329143e-01f, -1.83783713e-01f, -2.06247521e-01f, - -2.27642912e-01f, -2.47895575e-01f, -2.66934994e-01f, -2.84694759e-01f, - -3.01112940e-01f, -3.16132369e-01f, -3.29701030e-01f, -3.41772346e-01f, - -3.52305311e-01f, -3.61264967e-01f, -3.68622493e-01f, -3.74355402e-01f, - -3.78447769e-01f, -3.80890353e-01f, -3.81680737e-01f, -3.80823346e-01f, - -3.78329604e-01f, -3.74217856e-01f, -3.68513368e-01f, -3.61248333e-01f, - -3.52461771e-01f, -3.42199371e-01f, -3.30513331e-01f, -3.17462278e-01f, - -3.03110942e-01f, -2.87529909e-01f, -2.70795402e-01f, -2.52988932e-01f, - -2.34196901e-01f, -2.14510337e-01f, -1.94024366e-01f, -1.72837915e-01f, - -1.51053161e-01f, -1.28775054e-01f, -1.06110949e-01f, -8.31699904e-02f, - -6.00625904e-02f, -3.68999700e-02f, -1.37935592e-02f, 9.14553458e-03f, - 3.18070733e-02f, 5.40822352e-02f, 7.58641385e-02f, 9.70484745e-02f, - 1.17533938e-01f, 1.37222760e-01f, 1.56021286e-01f, 1.73840407e-01f, - 1.90596011e-01f, 2.06209480e-01f, 2.20608090e-01f, 2.33725388e-01f, - 2.45501544e-01f, 2.55883728e-01f, 2.64826361e-01f, 2.72291364e-01f, - 2.78248393e-01f, 2.82675023e-01f, 2.85556849e-01f, 2.86887621e-01f, - 2.86669233e-01f, 2.84911794e-01f, 2.81633533e-01f, 2.76860737e-01f, - 2.70627618e-01f, 2.62976159e-01f, 2.53955831e-01f, 2.43623409e-01f, - 2.32042617e-01f, 2.19283824e-01f, 2.05423637e-01f, 1.90544470e-01f, - 1.74734152e-01f, 1.58085383e-01f, 1.40695263e-01f, 1.22664710e-01f, - 1.04097951e-01f, 8.51019110e-02f, 6.57856138e-02f, 4.62595576e-02f, - 2.66351206e-02f, 7.02392479e-03f, -1.24628349e-02f, -3.17149760e-02f, - -5.06239785e-02f, -6.90836040e-02f, -8.69905146e-02f, -1.04244853e-01f, - -1.20750775e-01f, -1.36417108e-01f, -1.51157814e-01f, -1.64892426e-01f, - -1.77546604e-01f, -1.89052578e-01f, -1.99349459e-01f, -2.08383604e-01f, - -2.16108994e-01f, -2.22487452e-01f, -2.27488844e-01f, -2.31091294e-01f, - -2.33281282e-01f, -2.34053710e-01f, -2.33411914e-01f, -2.31367695e-01f, - -2.27941159e-01f, -2.23160659e-01f, -2.17062542e-01f, -2.09691005e-01f, - -2.01097713e-01f, -1.91341620e-01f, -1.80488420e-01f, -1.68610294e-01f, - -1.55785433e-01f, -1.42097452e-01f, -1.27634978e-01f, -1.12491085e-01f, - -9.67626792e-02f, -8.05498893e-02f, -6.39555117e-02f, -4.70843056e-02f, - -3.00423695e-02f, -1.29364721e-02f, 4.12658213e-03f, 2.10406497e-02f, - 3.77009117e-02f, 5.40045195e-02f, 6.98511685e-02f, 8.51438453e-02f, - 9.97893434e-02f, 1.13698854e-01f, 1.26788523e-01f, 1.38979975e-01f, - 1.50200835e-01f, 1.60385073e-01f, 1.69473512e-01f, 1.77414145e-01f, - 1.84162459e-01f, 1.89681664e-01f, 1.93943026e-01f, 1.96925891e-01f, - 1.98617880e-01f, 1.99014945e-01f, 1.98121379e-01f, 1.95949757e-01f, - 1.92520816e-01f, 1.87863336e-01f, 1.82013990e-01f, 1.75016936e-01f, - 1.66923648e-01f, 1.57792538e-01f, 1.47688544e-01f, 1.36682666e-01f, - 1.24851512e-01f, 1.12276865e-01f, 9.90449817e-02f, 8.52461277e-02f, - 7.09739571e-02f, 5.63248677e-02f, 4.13973844e-02f, 2.62914655e-02f, - 1.11078925e-02f, -4.05239147e-03f, -1.90890617e-02f, -3.39029253e-02f, - -4.83966164e-02f, -6.24753705e-02f, -7.60474312e-02f, -8.90248310e-02f, - -1.01323842e-01f, -1.12865634e-01f, -1.23576716e-01f, -1.33389421e-01f, - -1.42242349e-01f, -1.50080822e-01f, -1.56857133e-01f, -1.62530890e-01f, - -1.67069336e-01f, -1.70447432e-01f, -1.72648091e-01f, -1.73662223e-01f, - -1.73488855e-01f, -1.72134990e-01f, -1.69615638e-01f, -1.65953690e-01f, - -1.61179685e-01f, -1.55331592e-01f, -1.48454607e-01f, -1.40600737e-01f, - -1.31828470e-01f, -1.22202323e-01f, -1.11792473e-01f, -1.00674140e-01f, - -8.89271262e-02f, -7.66352871e-02f, -6.38858531e-02f, -5.07689244e-02f, - -3.73767275e-02f, -2.38031024e-02f, -1.01427700e-02f, 3.50934751e-03f, - 1.70586918e-02f, 3.04117852e-02f, 4.34768954e-02f, 5.61645819e-02f, - 6.83884030e-02f, 8.00654394e-02f, 9.11168932e-02f, 1.01468633e-01f, - 1.11051648e-01f, 1.19802610e-01f, 1.27664173e-01f, 1.34585462e-01f, - 1.40522346e-01f, 1.45437787e-01f, 1.49302022e-01f, 1.52092772e-01f, - 1.53795398e-01f, 1.54402941e-01f, 1.53916196e-01f, 1.52343637e-01f, - 1.49701396e-01f, 1.46013026e-01f, 1.41309468e-01f, 1.35628632e-01f, - 1.29015253e-01f, 1.21520496e-01f, 1.13201567e-01f, 1.04121296e-01f, - 9.43477288e-02f, 8.39535107e-02f, 7.30154990e-02f, 6.16141003e-02f, - 4.98327306e-02f, 3.77571918e-02f, 2.54750964e-02f, 1.30751821e-02f, - 6.46703310e-04f, -1.17211963e-02f, -2.39401591e-02f, -3.59231836e-02f, - -4.75853156e-02f, -5.88442141e-02f, -6.96206901e-02f, -7.98393844e-02f, - -8.94291504e-02f, -9.83236922e-02f, -1.06461911e-01f, -1.13788431e-01f, - -1.20253885e-01f, -1.25815350e-01f, -1.30436540e-01f, -1.34088139e-01f, - -1.36747929e-01f, -1.38400952e-01f, -1.39039622e-01f, -1.38663699e-01f, - -1.37280328e-01f, -1.34903937e-01f, -1.31556108e-01f, -1.27265426e-01f, - -1.22067204e-01f, -1.16003256e-01f, -1.09121554e-01f, -1.01475836e-01f, - -9.31252402e-02f, -8.41338287e-02f, -7.45701074e-02f, -6.45065373e-02f, - -5.40189487e-02f, -4.31860278e-02f, -3.20886964e-02f, -2.08095155e-02f, - -9.43209682e-03f, 1.95952348e-03f, 1.32815415e-02f, 2.44509086e-02f, - 3.53860502e-02f, 4.60073767e-02f, 5.62379012e-02f, 6.60038045e-02f, - 7.52349145e-02f, 8.38653047e-02f, 9.18337009e-02f, 9.90839224e-02f, - 1.05565308e-01f, 1.11233075e-01f, 1.16048569e-01f, 1.19979672e-01f, - 1.23000853e-01f, 1.25093440e-01f, 1.26245746e-01f, 1.26453062e-01f, - 1.25717722e-01f, 1.24049103e-01f, 1.21463405e-01f, 1.17983660e-01f, - 1.13639474e-01f, 1.08466740e-01f, 1.02507425e-01f, 9.58092271e-02f, - 8.84251889e-02f, 8.04132568e-02f, 7.18358762e-02f, 6.27595398e-02f, - 5.32541869e-02f, 4.33927283e-02f, 3.32505260e-02f, 2.29047308e-02f, - 1.24337991e-02f, 1.91679812e-03f, -8.56707996e-03f, -1.89392067e-02f, - -2.91220390e-02f, -3.90397544e-02f, -4.86187492e-02f, -5.77882518e-02f, - -6.64808274e-02f, -7.46328184e-02f, -8.21849070e-02f, -8.90824700e-02f, - -9.52760405e-02f, -1.00721606e-01f, -1.05380953e-01f, -1.09221973e-01f, - -1.12218800e-01f, -1.14352078e-01f, -1.15609043e-01f, -1.15983584e-01f, - -1.15476334e-01f, -1.14094552e-01f, -1.11852147e-01f, -1.08769485e-01f, - -1.04873243e-01f, -1.00196154e-01f, -9.47768230e-02f, -8.86593336e-02f, - -8.18929115e-02f, -7.45315642e-02f, -6.66336429e-02f, -5.82614122e-02f, - -4.94804661e-02f, -4.03593526e-02f, -3.09689748e-02f, -2.13820268e-02f, - -1.16724544e-02f, -1.91492456e-03f, 7.81582939e-03f, 1.74454843e-02f, - 2.69007705e-02f, 3.61099984e-02f, 4.50035684e-02f, 5.35145862e-02f, - 6.15792651e-02f, 6.91374558e-02f, 7.61331132e-02f, 8.25146874e-02f, - 8.82354960e-02f, 9.32540795e-02f, 9.75345512e-02f, 1.01046761e-01f, - 1.03766581e-01f, 1.05676059e-01f, 1.06763536e-01f, 1.07023704e-01f, - 1.06457645e-01f, 1.05072793e-01f, 1.02882886e-01f, 9.99077707e-02f, - 9.61733515e-02f, 9.17112437e-02f, 8.65585836e-02f, 8.07577320e-02f, - 7.43559143e-02f, 6.74048223e-02f, 5.99602286e-02f, 5.20815485e-02f, - 4.38313441e-02f, 3.52748647e-02f, 2.64794784e-02f, 1.75142425e-02f, - 8.44923569e-03f, -6.44874246e-04f, -9.69744245e-03f, -1.86383724e-02f, - -2.73986645e-02f, -3.59109639e-02f, -4.41100113e-02f, -5.19332538e-02f, - -5.93212174e-02f, -6.62180197e-02f, -7.25717930e-02f, -7.83350496e-02f, - -8.34650279e-02f, -8.79240738e-02f, -9.16798665e-02f, -9.47056367e-02f, - -9.69804367e-02f, -9.84892103e-02f, -9.92229391e-02f, -9.91786555e-02f, - -9.83594994e-02f, -9.67746323e-02f, -9.44391692e-02f, -9.13740384e-02f, - -8.76057968e-02f, -8.31664374e-02f, -7.80930677e-02f, -7.24276448e-02f, - -6.62166182e-02f, -5.95105803e-02f, -5.23638154e-02f, -4.48338833e-02f, - -3.69811953e-02f, -2.88684416e-02f, -2.05602211e-02f, -1.21223919e-02f, - -3.62166500e-03f, 4.87497472e-03f, 1.33008118e-02f, 2.15898817e-02f, - 2.96774903e-02f, 3.75007710e-02f, 4.49990900e-02f, 5.21145974e-02f, - 5.87926126e-02f, 6.49820878e-02f, 7.06359734e-02f, 7.57115940e-02f, - 8.01709511e-02f, 8.39810244e-02f, 8.71140281e-02f, 8.95475866e-02f, - 9.12649204e-02f, 9.22549366e-02f, 9.25123481e-02f, 9.20376276e-02f, - 9.08370647e-02f, 8.89226233e-02f, 8.63119090e-02f, 8.30279355e-02f, - 7.90990135e-02f, 7.45584160e-02f, 6.94441713e-02f, 6.37987430e-02f, - 5.76686372e-02f, 5.11040823e-02f, 4.41585505e-02f, 3.68884245e-02f, - 2.93523999e-02f, 2.16111886e-02f, 1.37268658e-02f, 5.76249790e-03f, - -2.21844412e-03f, -1.01525268e-02f, -1.79769055e-02f, -2.56297984e-02f, - -3.30509798e-02f, -4.01822180e-02f, -4.69678148e-02f, -5.33549679e-02f, - -5.92942039e-02f, -6.47397915e-02f, -6.96500034e-02f, -7.39875785e-02f, - -7.77198807e-02f, -8.08192090e-02f, -8.32629929e-02f, -8.50339403e-02f, - -8.61201727e-02f, -8.65153352e-02f, -8.62185642e-02f, -8.52345328e-02f, - -8.35733873e-02f, -8.12506452e-02f, -7.82870548e-02f, -7.47083936e-02f, - -7.05453033e-02f, -6.58330086e-02f, -6.06109755e-02f, -5.49226267e-02f, - -4.88150284e-02f, -4.23383952e-02f, -3.55457806e-02f, -2.84925949e-02f, - -2.12361386e-02f, -1.38352158e-02f, -6.34954674e-03f, 1.16060193e-03f, - 8.63496366e-03f, 1.60137521e-02f, 2.32381310e-02f, 3.02506552e-02f, - 3.69957912e-02f, 4.34202737e-02f, 4.94736003e-02f, 5.51084064e-02f, - 6.02807966e-02f, 6.49507475e-02f, 6.90823813e-02f, 7.26442553e-02f, - 7.56096025e-02f, 7.79565049e-02f, 7.96681192e-02f, 8.07327409e-02f, - 8.11438831e-02f, 8.09003904e-02f, 8.00063059e-02f, 7.84709455e-02f, - 7.63087509e-02f, 7.35391471e-02f, 7.01864251e-02f, 6.62794512e-02f, - 6.18515053e-02f, 5.69399870e-02f, 5.15860100e-02f, 4.58342039e-02f, - 3.97322256e-02f, 3.33304486e-02f, 2.66814783e-02f, 1.98397856e-02f, - 1.28612257e-02f, 5.80259393e-03f, -1.27886112e-03f, -8.32584019e-03f, - -1.52814930e-02f, -2.20899334e-02f, -2.86965591e-02f, -3.50486065e-02f, - -4.10954995e-02f, -4.67893136e-02f, -5.20850948e-02f, -5.69412403e-02f, - -6.13198474e-02f, -6.51869890e-02f, -6.85129647e-02f, -7.12725306e-02f, - -7.34451585e-02f, -7.50150843e-02f, -7.59714899e-02f, -7.63085524e-02f, - -7.60255166e-02f, -7.51266167e-02f, -7.36211027e-02f, -7.15230741e-02f, - -6.88514539e-02f, -6.56297130e-02f, -6.18857220e-02f, -5.76515554e-02f, - -5.29631207e-02f, -4.78599233e-02f, -4.23847313e-02f, -3.65832079e-02f, - -3.05035130e-02f, -2.41959566e-02f, -1.77125171e-02f, -1.11065052e-02f, - -4.43199940e-03f, 2.25646608e-03f, 8.90442951e-03f, 1.54579021e-02f, - 2.18638281e-02f, 2.80705462e-02f, 3.40280794e-02f, 3.96887204e-02f, - 4.50072604e-02f, 4.99414316e-02f, 5.44522079e-02f, 5.85041536e-02f, - 6.20656397e-02f, 6.51091720e-02f, 6.76114887e-02f, 6.95538952e-02f, - 7.09222580e-02f, 7.17071898e-02f, 7.19040960e-02f, 7.15131728e-02f, - 7.05394351e-02f, 6.89926231e-02f, 6.68871545e-02f, 6.42419416e-02f, - 6.10802598e-02f, 5.74295313e-02f, 5.33211189e-02f, 4.87899934e-02f, - 4.38745121e-02f, 3.86160670e-02f, 3.30586967e-02f, 2.72487970e-02f, - 2.12346816e-02f, 1.50661848e-02f, 8.79427315e-03f, 2.47061577e-03f, - -3.85286592e-03f, -1.01243770e-02f, -1.62927172e-02f, -2.23076581e-02f, - -2.81203948e-02f, -3.36839076e-02f, -3.89533679e-02f, -4.38864517e-02f, - -4.84437422e-02f, -5.25890421e-02f, -5.62895706e-02f, -5.95163477e-02f, - -6.22443207e-02f, -6.44526403e-02f, -6.61247499e-02f, -6.72485494e-02f, - -6.78164946e-02f, -6.78255920e-02f, -6.72774647e-02f, -6.61782995e-02f, - -6.45388112e-02f, -6.23740965e-02f, -5.97035328e-02f, -5.65505921e-02f, - -5.29426881e-02f, -4.89108139e-02f, -4.44894260e-02f, -3.97160733e-02f, - -3.46310671e-02f, -2.92771850e-02f, -2.36993008e-02f, -1.79439902e-02f, - -1.20591515e-02f, -6.09362869e-03f, -9.67646869e-05f, 5.88193161e-03f, - 1.17933059e-02f, 1.75888522e-02f, 2.32211575e-02f, 2.86443333e-02f, - 3.38142963e-02f, 3.86892021e-02f, 4.32297427e-02f, 4.73994738e-02f, - 5.11651476e-02f, 5.44969062e-02f, 5.73685597e-02f, 5.97578063e-02f, - 6.16463827e-02f, 6.30201712e-02f, 6.38694025e-02f, 6.41886234e-02f, - 6.39767725e-02f, 6.32372156e-02f, 6.19775942e-02f, 6.02098911e-02f, - 5.79502219e-02f, 5.52186945e-02f, 5.20393403e-02f, 4.84397091e-02f, - 4.44508421e-02f, 4.01068641e-02f, 3.54447399e-02f, 3.05039700e-02f, - 2.53262499e-02f, 1.99550952e-02f, 1.44355284e-02f, 8.81365390e-03f, - 3.13628120e-03f, -2.54943138e-03f, -8.19639523e-03f, -1.37579753e-02f, - -1.91883895e-02f, -2.44430618e-02f, -2.94789913e-02f, -3.42551088e-02f, - -3.87326249e-02f, -4.28753310e-02f, -4.66498901e-02f, -5.00261035e-02f, - -5.29771799e-02f, -5.54799037e-02f, -5.75148383e-02f, -5.90665317e-02f, - -6.01234993e-02f, -6.06784603e-02f, -6.07283027e-02f, -6.02740708e-02f, - -5.93210354e-02f, -5.78785948e-02f, -5.59601225e-02f, -5.35829951e-02f, - -5.07682523e-02f, -4.75405757e-02f, -4.39279759e-02f, -3.99615901e-02f, - -3.56753971e-02f, -3.11059445e-02f, -2.62920307e-02f, -2.12743678e-02f, - -1.60952574e-02f, -1.07981986e-02f, -5.42758786e-03f, -2.82820897e-05f, - 5.35475816e-03f, 1.06767918e-02f, 1.58937793e-02f, 2.09626000e-02f, - 2.58415407e-02f, 3.04905869e-02f, 3.48717018e-02f, 3.89492209e-02f, - 4.26901199e-02f, 4.60642317e-02f, 4.90445439e-02f, 5.16074029e-02f, - 5.37326813e-02f, 5.54039762e-02f, 5.66086803e-02f, 5.73381350e-02f, - 5.75876520e-02f, 5.73565533e-02f, 5.66481680e-02f, 5.54698025e-02f, - 5.38326410e-02f, 5.17516706e-02f, 4.92455315e-02f, 4.63363691e-02f, - 4.30496184e-02f, 3.94137631e-02f, 3.54601772e-02f, 3.12227524e-02f, - 2.67376509e-02f, 2.20430273e-02f, 1.71786786e-02f, 1.21856622e-02f, - 7.10604036e-03f, 1.98245601e-03f, -3.14218264e-03f, -8.22510738e-03f, - -1.32239734e-02f, -1.80973012e-02f, -2.28047577e-02f, -2.73075056e-02f, - -3.15685177e-02f, -3.55529069e-02f, -3.92281902e-02f, -4.25645528e-02f, - -4.55351013e-02f, -4.81160565e-02f, -5.02870006e-02f, -5.20309689e-02f, - -5.33346001e-02f, -5.41883074e-02f, -5.45862315e-02f, -5.45263860e-02f, - -5.40105902e-02f, -5.30444830e-02f, -5.16374652e-02f, -4.98025685e-02f, - -4.75564009e-02f, -4.49189535e-02f, -4.19134372e-02f, -3.85660549e-02f, - -3.49058685e-02f, -3.09643739e-02f, -2.67754233e-02f, -2.23747988e-02f, - -1.77999754e-02f, -1.30897755e-02f, -8.28403078e-03f, -3.42329111e-03f, - 1.45156003e-03f, 6.29963147e-03f, 1.10803882e-02f, 1.57539476e-02f, - 2.02814494e-02f, 2.46253752e-02f, 2.87498179e-02f, 3.26208554e-02f, - 3.62067406e-02f, 3.94782545e-02f, 4.24088471e-02f, 4.49749385e-02f, - 4.71560491e-02f, 4.89349963e-02f, 5.02980346e-02f, 5.12349025e-02f, - 5.17389769e-02f, 5.18073110e-02f, 5.14405369e-02f, 5.06430401e-02f, - 4.94227353e-02f, 4.77911027e-02f, 4.57630135e-02f, 4.33566667e-02f, - 4.05933433e-02f, 3.74973028e-02f, 3.40955069e-02f, 3.04173973e-02f, - 2.64947139e-02f, 2.23610806e-02f, 1.80518625e-02f, 1.36037814e-02f, - 9.05461294e-03f, 4.44289505e-03f, -1.92440179e-04f, -4.81233436e-03f, - -9.37799893e-03f, -1.38512169e-02f, -1.81946099e-02f, -2.23720431e-02f, - -2.63488613e-02f, -3.00921879e-02f, -3.35711998e-02f, -3.67574146e-02f, - -3.96248452e-02f, -4.21502967e-02f, -4.43135012e-02f, -4.60972960e-02f, - -4.74877737e-02f, -4.84743534e-02f, -4.90498864e-02f, -4.92107432e-02f, - -4.89567473e-02f, -4.82912269e-02f, -4.72210048e-02f, -4.57562287e-02f, - -4.39103965e-02f, -4.17001535e-02f, -3.91451580e-02f, -3.62679524e-02f, - -3.30936915e-02f, -2.96499930e-02f, -2.59666361e-02f, -2.20753766e-02f, - -1.80096001e-02f, -1.38040903e-02f, -9.49470398e-03f, -5.11805324e-03f, - -7.11263614e-04f, 3.68845212e-03f, 8.04397633e-03f, 1.23187361e-02f, - 1.64768878e-02f, 2.04837107e-02f, 2.43058243e-02f, 2.79115316e-02f, - 3.12710307e-02f, 3.43566819e-02f, 3.71432406e-02f, 3.96080600e-02f, - 4.17312589e-02f, 4.34958998e-02f, 4.48881324e-02f, 4.58972728e-02f, - 4.65159011e-02f, 4.67399486e-02f, 4.65686301e-02f, 4.60045573e-02f, - 4.50536126e-02f, 4.37249572e-02f, 4.20309099e-02f, 3.99868149e-02f, - 3.76109658e-02f, 3.49244023e-02f, 3.19507068e-02f, 2.87158399e-02f, - 2.52478981e-02f, 2.15768722e-02f, 1.77343611e-02f, 1.37533396e-02f, - 9.66788343e-03f, 5.51281005e-03f, 1.32343973e-03f, -2.86465940e-03f, - -7.01611627e-03f, -1.10959241e-02f, -1.50697748e-02f, -1.89043738e-02f, - -2.25676833e-02f, -2.60292100e-02f, -2.92602731e-02f, -3.22341600e-02f, - -3.49264870e-02f, -3.73152937e-02f, -3.93812165e-02f, -4.11077217e-02f, - -4.24811803e-02f, -4.34909828e-02f, -4.41296386e-02f, -4.43928125e-02f, - -4.42793688e-02f, -4.37913678e-02f, -4.29339923e-02f, -4.17156128e-02f, - -4.01475749e-02f, -3.82441650e-02f, -3.60224960e-02f, -3.35022818e-02f, - -3.07057642e-02f, -2.76574300e-02f, -2.43838133e-02f, -2.09133302e-02f, - -1.72759525e-02f, -1.35029658e-02f, -9.62678336e-03f, -5.68051801e-03f, - -1.69782450e-03f, 2.28741709e-03f, 6.24142092e-03f, 1.01307640e-02f, - 1.39226541e-02f, 1.75852206e-02f, 2.10877784e-02f, 2.44011197e-02f, - 2.74976630e-02f, 3.03517861e-02f, 3.29399891e-02f, 3.52410789e-02f, - 3.72364000e-02f, 3.89098736e-02f, 4.02482712e-02f, 4.12411943e-02f, - 4.18812295e-02f, 4.21639571e-02f, 4.20880553e-02f, 4.16551548e-02f, - 4.08700173e-02f, 3.97403235e-02f, 3.82766485e-02f, 3.64924037e-02f, - 3.44036670e-02f, 3.20290679e-02f, 2.93895781e-02f, 2.65084084e-02f, - 2.34107263e-02f, 2.01234514e-02f, 1.66750736e-02f, 1.30953481e-02f, - 9.41506492e-03f, 5.66577314e-03f, 1.87953721e-03f, -1.91138340e-03f, - -5.67474970e-03f, -9.37866958e-03f, -1.29918571e-02f, -1.64838496e-02f, - -1.98253468e-02f, -2.29883663e-02f, -2.59465660e-02f, -2.86753884e-02f, - -3.11523087e-02f, -3.33570024e-02f, -3.52715334e-02f, -3.68804752e-02f, - -3.81710220e-02f, -3.91331489e-02f, -3.97596215e-02f, -4.00461207e-02f, - -3.99911716e-02f, -3.95962751e-02f, -3.88657519e-02f, -3.78068352e-02f, - -3.64294686e-02f, -3.47463159e-02f, -3.27725952e-02f, -3.05259482e-02f, - -2.80262873e-02f, -2.52956368e-02f, -2.23579079e-02f, -1.92387018e-02f, - -1.59651184e-02f, -1.25654653e-02f, -9.06903728e-03f, -5.50589383e-03f, - -1.90658612e-03f, 1.69819644e-03f, 5.27767591e-03f, 8.80149662e-03f, - 1.22398002e-02f, 1.55635605e-02f, 1.87448095e-02f, 2.17568784e-02f, - 2.45746067e-02f, 2.71745749e-02f, 2.95352660e-02f, 3.16372730e-02f, - 3.34634806e-02f, 3.49991083e-02f, 3.62319569e-02f, 3.71524003e-02f, - 3.77535229e-02f, 3.80311360e-02f, 3.79838595e-02f, 3.76130115e-02f, - 3.69227353e-02f, 3.59198588e-02f, 3.46138556e-02f, 3.30167422e-02f, - 3.11429955e-02f, 2.90094255e-02f, 2.66349737e-02f, 2.40406079e-02f, - 2.12490922e-02f, 1.82848227e-02f, 1.51735699e-02f, 1.19423378e-02f, - 8.61899874e-03f, 5.23220696e-03f, 1.81100681e-03f, -1.61529876e-03f, - -5.01747104e-03f, -8.36657631e-03f, -1.16341674e-02f, -1.47926336e-02f, - -1.78153429e-02f, -2.06769168e-02f, -2.33533934e-02f, -2.58225130e-02f, - -2.80638107e-02f, -3.00588248e-02f, -3.17912703e-02f, -3.32471461e-02f, - -3.44148496e-02f, -3.52852564e-02f, -3.58518459e-02f, -3.61106776e-02f, - -3.60604528e-02f, -3.57025239e-02f, -3.50408687e-02f, -3.40820566e-02f, - -3.28351332e-02f, -3.13116305e-02f, -2.95253828e-02f, -2.74924261e-02f, - -2.52308529e-02f, -2.27606768e-02f, -2.01036311e-02f, -1.72829328e-02f, - -1.43232049e-02f, -1.12501406e-02f, -8.09033460e-03f, -4.87102079e-03f, - -1.61991454e-03f, 1.63511391e-03f, 4.86626363e-03f, 8.04597224e-03f, - 1.11472224e-02f, 1.41437409e-02f, 1.70102606e-02f, 1.97226336e-02f, - 2.22581567e-02f, 2.45957058e-02f, 2.67158611e-02f, 2.86011679e-02f, - 3.02362198e-02f, 3.16077891e-02f, 3.27049359e-02f, 3.35191077e-02f, - 3.40442066e-02f, 3.42766034e-02f, 3.42151913e-02f, 3.38613937e-02f, - 3.32191151e-02f, 3.22947056e-02f, 3.10969473e-02f, 2.96368987e-02f, - 2.79278426e-02f, 2.59851513e-02f, 2.38261551e-02f, 2.14699783e-02f, - 1.89373695e-02f, 1.62505430e-02f, 1.34329466e-02f, 1.05090853e-02f, - 7.50431274e-03f, 4.44457496e-03f, 1.35623378e-03f, -1.73420401e-03f, - -4.80027676e-03f, -7.81581580e-03f, -1.07551646e-02f, -1.35933944e-02f, - -1.63065125e-02f, -1.88716732e-02f, -2.12673829e-02f, -2.34736329e-02f, - -2.54721072e-02f, -2.72463321e-02f, -2.87818120e-02f, -3.00661165e-02f, - -3.10890008e-02f, -3.18425307e-02f, -3.23210635e-02f, -3.25213258e-02f, - -3.24424720e-02f, -3.20860357e-02f, -3.14558962e-02f, -3.05582934e-02f, - -2.94017600e-02f, -2.79969684e-02f, -2.63567172e-02f, -2.44957911e-02f, - -2.24308005e-02f, -2.01800752e-02f, -1.77634589e-02f, -1.52021705e-02f, - -1.25186056e-02f, -9.73612725e-03f, -6.87889048e-03f, -3.97162201e-03f, - -1.03936748e-03f, 1.89264412e-03f, 4.79928751e-03f, 7.65573326e-03f, - 1.04376485e-02f, 1.31214182e-02f, 1.56843167e-02f, 1.81047816e-02f, - 2.03624722e-02f, 2.24385491e-02f, 2.43157747e-02f, 2.59786613e-02f, - 2.74136059e-02f, 2.86090270e-02f, 2.95554085e-02f, 3.02453933e-02f, - 3.06738695e-02f, 3.08379709e-02f, 3.07371080e-02f, 3.03729625e-02f, - 2.97494799e-02f, 2.88728239e-02f, 2.77512742e-02f, 2.63952326e-02f, - 2.48170551e-02f, 2.30309672e-02f, 2.10529469e-02f, 1.89005531e-02f, - 1.65928079e-02f, 1.41499753e-02f, 1.15934547e-02f, 8.94553439e-03f, - 6.22921565e-03f, 3.46802456e-03f, 6.85807660e-04f, -2.09351762e-03f, - -4.84607801e-03f, -7.54834950e-03f, -1.01772976e-02f, -1.27105702e-02f, - -1.51267312e-02f, -1.74054170e-02f, -1.95274752e-02f, -2.14752102e-02f, - -2.32324132e-02f, -2.47846112e-02f, -2.61191248e-02f, -2.72251852e-02f, - -2.80939857e-02f, -2.87188307e-02f, -2.90951296e-02f, -2.92204205e-02f, - -2.90944185e-02f, -2.87189899e-02f, -2.80981757e-02f, -2.72380366e-02f, - -2.61467465e-02f, -2.48343900e-02f, -2.33129547e-02f, -2.15961399e-02f, - -1.96993447e-02f, -1.76394103e-02f, -1.54345417e-02f, -1.31041691e-02f, - -1.06686731e-02f, -8.14934589e-03f, -5.56806233e-03f, -2.94722846e-03f, - -3.09480282e-04f, 2.32248018e-03f, 4.92603655e-03f, 7.47890755e-03f, - 9.95933342e-03f, 1.23462104e-02f, 1.46193259e-02f, 1.67595114e-02f, - 1.87488002e-02f, 2.05705588e-02f, 2.22096708e-02f, 2.36526409e-02f, - 2.48876669e-02f, 2.59048208e-02f, 2.66960464e-02f, 2.72552501e-02f, - 2.75783775e-02f, 2.76634150e-02f, 2.75103717e-02f, 2.71213402e-02f, - 2.65004170e-02f, 2.56536729e-02f, 2.45891352e-02f, 2.33166362e-02f, - 2.18477931e-02f, 2.01958648e-02f, 1.83756573e-02f, 1.64033346e-02f, - 1.42963876e-02f, 1.20733364e-02f, 9.75368948e-03f, 7.35772256e-03f, - 4.90625681e-03f, 2.42058549e-03f, -7.78123459e-05f, -2.56740681e-03f, - -5.02679577e-03f, -7.43492567e-03f, -9.77127015e-03f, -1.20159192e-02f, - -1.41498747e-02f, -1.61551576e-02f, -1.80148982e-02f, -1.97135784e-02f, - -2.12371093e-02f, -2.25729462e-02f, -2.37102058e-02f, -2.46397233e-02f, - -2.53542230e-02f, -2.58482111e-02f, -2.61181554e-02f, -2.61624917e-02f, - -2.59815513e-02f, -2.55776241e-02f, -2.49549139e-02f, -2.41194964e-02f, - -2.30792716e-02f, -2.18438342e-02f, -2.04244587e-02f, -1.88339919e-02f, - -1.70866610e-02f, -1.51980228e-02f, -1.31848099e-02f, -1.10647537e-02f, - -8.85646007e-03f, -6.57922197e-03f, -4.25289625e-03f, -1.89763580e-03f, - 4.66153419e-04f, 2.81808458e-03f, 5.13797202e-03f, 7.40592877e-03f, - 9.60259119e-03f, 1.17092799e-02f, 1.37081595e-02f, 1.55823451e-02f, - 1.73161398e-02f, 1.88950442e-02f, 2.03059901e-02f, 2.15373720e-02f, - 2.25791706e-02f, 2.34230473e-02f, 2.40623953e-02f, 2.44923608e-02f, - 2.47099481e-02f, 2.47139948e-02f, 2.45051449e-02f, 2.40859346e-02f, - 2.34606570e-02f, 2.26353881e-02f, 2.16179088e-02f, 2.04175981e-02f, - 1.90454439e-02f, 1.75138196e-02f, 1.58364356e-02f, 1.40282761e-02f, - 1.21053168e-02f, 1.00845358e-02f, 7.98365780e-03f, 5.82106543e-03f, - 3.61560367e-03f, 1.38641929e-03f, -8.47218784e-04f, -3.06599466e-03f, - -5.25087774e-03f, -7.38313991e-03f, -9.44455890e-03f, -1.14176395e-02f, - -1.32856363e-02f, -1.50328238e-02f, -1.66445337e-02f, -1.81073376e-02f, - -1.94091057e-02f, -2.05391909e-02f, -2.14883924e-02f, -2.22491632e-02f, - -2.28155723e-02f, -2.31833780e-02f, -2.33501014e-02f, -2.33149599e-02f, - -2.30789680e-02f, -2.26448166e-02f, -2.20169170e-02f, -2.12013570e-02f, - -2.02057946e-02f, -1.90394186e-02f, -1.77128837e-02f, -1.62381452e-02f, - -1.46284655e-02f, -1.28981349e-02f, -1.10625252e-02f, -9.13782192e-03f, - -7.14089458e-03f, -5.08925289e-03f, -3.00076224e-03f, -8.93563929e-04f, - 1.21412493e-03f, 3.30408095e-03f, 5.35835840e-03f, 7.35936068e-03f, - 9.29000657e-03f, 1.11338879e-02f, 1.28753714e-02f, 1.44998123e-02f, - 1.59935874e-02f, 1.73442409e-02f, 1.85406270e-02f, 1.95729684e-02f, - 2.04328853e-02f, 2.11135770e-02f, 2.16097716e-02f, 2.19178390e-02f, - 2.20357483e-02f, 2.19631551e-02f, 2.17013288e-02f, 2.12531940e-02f, - 2.06232436e-02f, 1.98175530e-02f, 1.88436810e-02f, 1.77106134e-02f, - 1.64286792e-02f, 1.50094525e-02f, 1.34656661e-02f, 1.18110672e-02f, - 1.00603222e-02f, 8.22887936e-03f, 6.33283241e-03f, 4.38874672e-03f, - 2.41360251e-03f, 4.24522718e-04f, -1.56124462e-03f, -3.52657933e-03f, - -5.45459389e-03f, -7.32876872e-03f, -9.13310880e-03f, -1.08522951e-02f, - -1.24717730e-02f, -1.39778955e-02f, -1.53580868e-02f, -1.66008540e-02f, - -1.76959435e-02f, -1.86344131e-02f, -1.94087423e-02f, -2.00127825e-02f, - -2.04419305e-02f, -2.06931003e-02f, -2.07647439e-02f, -2.06568662e-02f, - -2.03710410e-02f, -1.99103562e-02f, -1.92794106e-02f, -1.84842504e-02f, - -1.75323167e-02f, -1.64323977e-02f, -1.51944972e-02f, -1.38297917e-02f, - -1.23505473e-02f, -1.07699177e-02f, -9.10190890e-03f, -7.36125336e-03f, - -5.56322740e-03f, -3.72358380e-03f, -1.85834629e-03f, 1.62797268e-05f, - 1.88406706e-03f, 3.72890929e-03f, 5.53494881e-03f, 7.28672421e-03f, - 8.96929998e-03f, 1.05683732e-02f, 1.20704430e-02f, 1.34628666e-02f, - 1.47340226e-02f, 1.58733625e-02f, 1.68714835e-02f, 1.77202945e-02f, - 1.84129995e-02f, 1.89441562e-02f, 1.93097640e-02f, 1.95072568e-02f, - 1.95355280e-02f, 1.93949451e-02f, 1.90873200e-02f, 1.86159281e-02f, - 1.79854186e-02f, 1.72018134e-02f, 1.62724351e-02f, 1.52058602e-02f, - 1.40117601e-02f, 1.27009429e-02f, 1.12851595e-02f, 9.77701852e-03f, - 8.18987013e-03f, 6.53774227e-03f, 4.83514325e-03f, 3.09695569e-03f, - 1.33834551e-03f, -4.25417736e-04f, -2.17907719e-03f, -3.90750635e-03f, - -5.59584405e-03f, -7.22967588e-03f, -8.79504135e-03f, -1.02786946e-02f, - -1.16680841e-02f, -1.29515500e-02f, -1.41183852e-02f, -1.51589335e-02f, - -1.60646521e-02f, -1.68282128e-02f, -1.74435295e-02f, -1.79058268e-02f, - -1.82116669e-02f, -1.83589783e-02f, -1.83470786e-02f, -1.81766429e-02f, - -1.78497359e-02f, -1.73697470e-02f, -1.67414052e-02f, -1.59706714e-02f, - -1.50647456e-02f, -1.40319474e-02f, -1.28817007e-02f, -1.16243487e-02f, - -1.02711700e-02f, -8.83423668e-03f, -7.32626993e-03f, -5.76055872e-03f, - -4.15088347e-03f, -2.51130684e-03f, -8.56121139e-04f, 8.00308080e-04f, - 2.44364656e-03f, 4.05971160e-03f, 5.63466432e-03f, 7.15502326e-03f, - 8.60784346e-03f, 9.98079276e-03f, 1.12623356e-02f, 1.24416991e-02f, - 1.35090584e-02f, 1.44556378e-02f, 1.52736545e-02f, 1.59565533e-02f, - 1.64989049e-02f, 1.68965640e-02f, 1.71466261e-02f, 1.72474699e-02f, - 1.71988001e-02f, 1.70016009e-02f, 1.66581092e-02f, 1.61718740e-02f, - 1.55476166e-02f, 1.47912749e-02f, 1.39098794e-02f, 1.29115146e-02f, - 1.18052872e-02f, 1.06011344e-02f, 9.30987887e-03f, 7.94299705e-03f, - 6.51261294e-03f, 5.03132373e-03f, 3.51216505e-03f, 1.96838522e-03f, - 4.13468447e-04f, -1.13910857e-03f, -2.67593573e-03f, -4.18373241e-03f, - -5.64960835e-03f, -7.06102465e-03f, -8.40597413e-03f, -9.67306954e-03f, - -1.08516566e-02f, -1.19318601e-02f, -1.29047339e-02f, -1.37622291e-02f, - -1.44974073e-02f, -1.51043649e-02f, -1.55783142e-02f, -1.59157002e-02f, - -1.61141039e-02f, -1.61723481e-02f, -1.60904670e-02f, -1.58696900e-02f, - -1.55124969e-02f, -1.50224681e-02f, -1.44043694e-02f, -1.36640534e-02f, - -1.28083790e-02f, -1.18451989e-02f, -1.07832734e-02f, -9.63216695e-03f, - -8.40217979e-03f, -7.10427993e-03f, -5.74993358e-03f, -4.35111118e-03f, - -2.92006835e-03f, -1.46932453e-03f, -1.15175859e-05f, 1.44071303e-03f, - 2.87483552e-03f, 4.27848214e-03f, 5.63962178e-03f, 6.94667140e-03f, - 8.18849175e-03f, 9.35461319e-03f, 1.04352259e-02f, 1.14213169e-02f, - 1.23047082e-02f, 1.30781646e-02f, 1.37354286e-02f, 1.42712333e-02f, - 1.46814453e-02f, 1.49630117e-02f, 1.51139756e-02f, 1.51335483e-02f, - 1.50220835e-02f, 1.47810620e-02f, 1.44130827e-02f, 1.39218007e-02f, - 1.33119894e-02f, 1.25893957e-02f, 1.17606823e-02f, 1.08334768e-02f, - 9.81618503e-03f, 8.71796809e-03f, 7.54864594e-03f, 6.31863400e-03f, - 5.03883063e-03f, 3.72048341e-03f, 2.37517536e-03f, 1.01468348e-03f, - -3.49196130e-04f, -1.70461937e-03f, -3.03987673e-03f, -4.34350332e-03f, - -5.60433339e-03f, -6.81160996e-03f, -7.95512104e-03f, -9.02519096e-03f, - -1.00128542e-02f, -1.09099085e-02f, -1.17089124e-02f, -1.24033803e-02f, - -1.29876865e-02f, -1.34572282e-02f, -1.38083913e-02f, -1.40386233e-02f, - -1.41463921e-02f, -1.41312813e-02f, -1.39939047e-02f, -1.37359379e-02f, - -1.33601191e-02f, -1.28701544e-02f, -1.22707533e-02f, -1.15675607e-02f, - -1.07670757e-02f, -9.87660975e-03f, -8.90426422e-03f, -7.85876691e-03f, - -6.74947754e-03f, -5.58627059e-03f, -4.37942163e-03f, -3.13956447e-03f, - -1.87757286e-03f, -6.04471683e-04f, 6.68687153e-04f, 1.93086297e-03f, - 3.17116571e-03f, 4.37896308e-03f, 5.54391133e-03f, 6.65608640e-03f, - 7.70610236e-03f, 8.68508463e-03f, 9.58487893e-03f, 1.03979809e-02f, - 1.11177300e-02f, 1.17382727e-02f, 1.22546165e-02f, 1.26627517e-02f, - 1.29595607e-02f, 1.31429469e-02f, 1.32117696e-02f, 1.31659380e-02f, - 1.30062790e-02f, 1.27346679e-02f, 1.23539183e-02f, 1.18677784e-02f, - 1.12808819e-02f, 1.05987296e-02f, 9.82765005e-03f, 8.97466282e-03f, - 8.04750011e-03f, 7.05450097e-03f, 6.00455814e-03f, 4.90697069e-03f, - 3.77147007e-03f, 2.60803032e-03f, 1.42685205e-03f, 2.38252620e-04f, - -9.47456984e-04f, -2.12001557e-03f, -3.26930604e-03f, -4.38549571e-03f, - -5.45903303e-03f, -6.48080118e-03f, -7.44217435e-03f, -8.33506789e-03f, - -9.15202991e-03f, -9.88632138e-03f, -1.05319082e-02f, -1.10835810e-02f, - -1.15369475e-02f, -1.18884995e-02f, -1.21356183e-02f, -1.22765935e-02f, - -1.23106741e-02f, -1.22379903e-02f, -1.20596309e-02f, -1.17775907e-02f, - -1.13947504e-02f, -1.09148490e-02f, -1.03424524e-02f, -9.68292516e-03f, - -8.94233597e-03f, -8.12744125e-03f, -7.24562722e-03f, -6.30481777e-03f, - -5.31340458e-03f, -4.28019210e-03f, -3.21432388e-03f, -2.12514582e-03f, - -1.02222518e-03f, 8.48402655e-05f, 1.18644055e-03f, 2.27305998e-03f, - 3.33534080e-03f, 4.36417880e-03f, 5.35082505e-03f, 6.28688841e-03f, - 7.16448437e-03f, 7.97626556e-03f, 8.71547416e-03f, 9.37602127e-03f, - 9.95252480e-03f, 1.04403423e-02f, 1.08356349e-02f, 1.11353709e-02f, - 1.13373727e-02f, 1.14403200e-02f, 1.14437206e-02f, 1.13479929e-02f, - 1.11544081e-02f, 1.08650423e-02f, 1.04828191e-02f, 1.00114740e-02f, - 9.45546226e-03f, 8.81995782e-03f, 8.11083408e-03f, 7.33454940e-03f, - 6.49810508e-03f, 5.60902655e-03f, 4.67524423e-03f, 3.70504943e-03f, - 2.70698716e-03f, 1.68984103e-03f, 6.62511289e-04f, -3.66063830e-04f, - -1.38696193e-03f, -2.39137620e-03f, -3.37067114e-03f, -4.31647732e-03f, - -5.22074273e-03f, -6.07581700e-03f, -6.87449892e-03f, -7.61012299e-03f, - -8.27659902e-03f, -8.86843891e-03f, -9.38086115e-03f, -9.80976718e-03f, - -1.01518071e-02f, -1.04044062e-02f, -1.05657705e-02f, -1.06349047e-02f, - -1.06116070e-02f, -1.04965065e-02f, -1.02910004e-02f, -9.99726062e-03f, - -9.61823783e-03f, -9.15759359e-03f, -8.61966847e-03f, -8.00948048e-03f, - -7.33263803e-03f, -6.59530070e-03f, -5.80411820e-03f, -4.96619474e-03f, - -4.08901524e-03f, -3.18032417e-03f, -2.24815040e-03f, -1.30069573e-03f, - -3.46202014e-04f, 6.07005678e-04f, 1.55067386e-03f, 2.47666319e-03f, - 3.37705799e-03f, 4.24414413e-03f, 5.07055312e-03f, 5.84933606e-03f, - 6.57394125e-03f, 7.23833180e-03f, 7.83701102e-03f, 8.36512776e-03f, - 8.81838829e-03f, 9.19320845e-03f, 9.48670950e-03f, 9.69671225e-03f, - 9.82176780e-03f, 9.86117239e-03f, 9.81500060e-03f, 9.68401019e-03f, - 9.46973376e-03f, 9.17440866e-03f, 8.80096882e-03f, 8.35299798e-03f, - 7.83470675e-03f, 7.25092919e-03f, 6.60700863e-03f, 5.90880044e-03f, - 5.16260232e-03f, 4.37511499e-03f, 3.55333719e-03f, 2.70453571e-03f, - 1.83621654e-03f, 9.55971892e-04f, 7.14941081e-05f, -8.09546859e-04f, - -1.67949997e-03f, -2.53091770e-03f, -3.35648519e-03f, -4.14916820e-03f, - -4.90226718e-03f, -5.60941116e-03f, -6.26471868e-03f, -6.86271228e-03f, - -7.39850829e-03f, -7.86773441e-03f, -8.26664253e-03f, -8.59209655e-03f, - -8.84162491e-03f, -9.01340035e-03f, -9.10631046e-03f, -9.11992414e-03f, - -9.05447739e-03f, -8.91090648e-03f, -8.69081572e-03f, -8.39650138e-03f, - -8.03081656e-03f, -7.59728914e-03f, -7.09998516e-03f, -6.54351866e-03f, - -5.93297162e-03f, -5.27391890e-03f, -4.57225558e-03f, -3.83429395e-03f, - -3.06659425e-03f, -2.27593987e-03f, -1.46929411e-03f, -6.53717718e-04f, - 1.63676664e-04f, 9.75799545e-04f, 1.77563501e-03f, 2.55633177e-03f, - 3.31116336e-03f, 4.03378434e-03f, 4.71802893e-03f, 5.35816666e-03f, - 5.94887641e-03f, 6.48526029e-03f, 6.96292147e-03f, 7.37801172e-03f, - 7.72723246e-03f, 8.00785932e-03f, 8.21780315e-03f, 8.35557459e-03f, - 8.42032149e-03f, 8.41183281e-03f, 8.33054181e-03f, 8.17747564e-03f, - 7.95433786e-03f, 7.66336298e-03f, 7.30743051e-03f, 6.88990453e-03f, - 6.41471602e-03f, 5.88625192e-03f, 5.30935851e-03f, 4.68925554e-03f, - 4.03151761e-03f, 3.34203719e-03f, 2.62693694e-03f, 1.89253809e-03f, - 1.14528552e-03f, 3.91735329e-04f, -3.61576948e-04f, -1.10810138e-03f, - -1.84142652e-03f, -2.55525216e-03f, -3.24348047e-03f, -3.90028979e-03f, - -4.52012845e-03f, -5.09781875e-03f, -5.62855343e-03f, -6.10796080e-03f, - -6.53213670e-03f, -6.89768993e-03f, -7.20172730e-03f, -7.44190362e-03f, - -7.61648070e-03f, -7.72424208e-03f, -7.76459042e-03f, -7.73750201e-03f, - -7.64355603e-03f, -7.48387832e-03f, -7.26015909e-03f, -6.97470458e-03f, - -6.63023185e-03f, -6.23005432e-03f, -5.77789750e-03f, -5.27794195e-03f, - -4.73473676e-03f, -4.15323407e-03f, -3.53862105e-03f, -2.89641236e-03f, - -2.23229690e-03f, -1.55213945e-03f, -8.61924039e-04f, -1.67646019e-04f, - 5.24634726e-04f, 1.20893687e-03f, 1.87936876e-03f, 2.53020242e-03f, - 3.15589017e-03f, 3.75112921e-03f, 4.31093227e-03f, 4.83063434e-03f, - 5.30589437e-03f, 5.73285894e-03f, 6.10805341e-03f, 6.42847724e-03f, - 6.69165721e-03f, 6.89558077e-03f, 7.03876861e-03f, 7.12031596e-03f, - 7.13979497e-03f, 7.09737416e-03f, 6.99372292e-03f, 6.83002861e-03f, - 6.60805053e-03f, 6.32997518e-03f, 5.99849919e-03f, 5.61676889e-03f, - 5.18833988e-03f, 4.71716487e-03f, 4.20753440e-03f, 3.66405499e-03f, - 3.09162548e-03f, 2.49532169e-03f, 1.88042982e-03f, 1.25240798e-03f, - 6.16721933e-04f, -2.10678481e-05f, -6.55427849e-04f, -1.28088666e-03f, - -1.89206206e-03f, -2.48374616e-03f, -3.05092627e-03f, -3.58876931e-03f, - -4.09281312e-03f, -4.55886002e-03f, -4.98304465e-03f, -5.36192844e-03f, - -5.69246645e-03f, -5.97202847e-03f, -6.19845814e-03f, -6.37007698e-03f, - -6.48568424e-03f, -6.54455208e-03f, -6.54646884e-03f, -6.49172972e-03f, - -6.38107878e-03f, -6.21576754e-03f, -5.99751984e-03f, -5.72848662e-03f, - -5.41128232e-03f, -5.04886935e-03f, -4.64464895e-03f, -4.20232731e-03f, - -3.72592908e-03f, -3.21976323e-03f, -2.68837079e-03f, -2.13647137e-03f, - -1.56895819e-03f, -9.90826814e-04f, -4.07137101e-04f, 1.77034128e-04f, - 7.56614045e-04f, 1.32662280e-03f, 1.88216158e-03f, 2.41851689e-03f, - 2.93111653e-03f, 3.41567923e-03f, 3.86812645e-03f, 4.28473921e-03f, - 4.66208309e-03f, 4.99709627e-03f, 5.28710944e-03f, 5.52983700e-03f, - 5.72344791e-03f, 5.86650915e-03f, 5.95806206e-03f, 5.99756713e-03f, - 5.98498044e-03f, 5.92067495e-03f, 5.80547493e-03f, 5.64067393e-03f, - 5.42792578e-03f, 5.16935371e-03f, 4.86743833e-03f, 4.52499899e-03f, - 4.14524387e-03f, 3.73165445e-03f, 3.28798006e-03f, 2.81822731e-03f, - 2.32660442e-03f, 1.81747333e-03f, 1.29535738e-03f, 7.64811514e-04f, - 2.30499750e-04f, -3.02941233e-04f, -8.30904036e-04f, -1.34884935e-03f, - -1.85232914e-03f, -2.33709184e-03f, -2.79902951e-03f, -3.23425712e-03f, - -3.63917195e-03f, -4.01042034e-03f, -4.34498121e-03f, -4.64014771e-03f, - -4.89357867e-03f, -5.10333096e-03f, -5.26778390e-03f, -5.38579823e-03f, - -5.45658844e-03f, -5.47979294e-03f, -5.45548594e-03f, -5.38411670e-03f, - -5.26658130e-03f, -5.10413250e-03f, -4.89843368e-03f, -4.65147045e-03f, - -4.36565944e-03f, -4.04362854e-03f, -3.68839513e-03f, -3.30322131e-03f, - -2.89157726e-03f, -2.45718506e-03f, -2.00393056e-03f, -1.53582784e-03f, - -1.05702424e-03f, -5.71697826e-04f, -8.41072148e-05f, 4.01536814e-04f, - 8.81019836e-04f, 1.35024965e-03f, 1.80521520e-03f, 2.24205417e-03f, - 2.65710363e-03f, 3.04687963e-03f, 3.40815186e-03f, 3.73795216e-03f, - 4.03361599e-03f, 4.29276556e-03f, 4.51335779e-03f, 4.69370830e-03f, - 4.83246574e-03f, 4.92869877e-03f, 4.98175710e-03f, 4.99146876e-03f, - 4.95797374e-03f, 4.88180168e-03f, 4.76385107e-03f, 4.60539108e-03f, - 4.40799947e-03f, 4.17361084e-03f, 3.90446439e-03f, 3.60306851e-03f, - 3.27223243e-03f, 2.91495118e-03f, 2.53450126e-03f, 2.13428258e-03f, - 1.71785917e-03f, 1.28894440e-03f, 8.51307681e-04f, 4.08783855e-04f, - -3.47765574e-05f, -4.75529382e-04f, -9.09669659e-04f, -1.33349225e-03f, - -1.74339270e-03f, -2.13590830e-03f, -2.50772263e-03f, -2.85576594e-03f, - -3.17714507e-03f, -3.46924367e-03f, -3.72969621e-03f, -3.95645033e-03f, - -4.14770845e-03f, -4.30203167e-03f, -4.41831180e-03f, -4.49574815e-03f, - -4.53388522e-03f, -4.53264318e-03f, -4.49224360e-03f, -4.41325534e-03f, - -4.29659437e-03f, -4.14348253e-03f, -3.95545723e-03f, -3.73433539e-03f, - -3.48222611e-03f, -3.20148621e-03f, -2.89470832e-03f, -2.56468722e-03f, - -2.21442685e-03f, -1.84705410e-03f, -1.46585762e-03f, -1.07420242e-03f, - -6.75541964e-04f, -2.73362726e-04f, 1.28857758e-04f, 5.27625747e-04f, - 9.19505126e-04f, 1.30117518e-03f, 1.66938725e-03f, 2.02102017e-03f, - 2.35316570e-03f, 2.66303554e-03f, 2.94810484e-03f, 3.20604525e-03f, - 3.43477820e-03f, 3.63252281e-03f, 3.79773367e-03f, 3.92918244e-03f, - 4.02592670e-03f, 4.08733570e-03f, 4.11309343e-03f, 4.10318081e-03f, - 4.05789653e-03f, 3.97783502e-03f, 3.86391767e-03f, 3.71728516e-03f, - 3.53944503e-03f, 3.33208164e-03f, 3.09717361e-03f, 2.83693803e-03f, - 2.55373764e-03f, 2.25016474e-03f, 1.92898540e-03f, 1.59304145e-03f, - 1.24535047e-03f, 8.88983788e-04f, 5.27054162e-04f, 1.62739254e-04f, - -2.00809162e-04f, -5.60458110e-04f, -9.13122723e-04f, -1.25578987e-03f, - -1.58556683e-03f, -1.89968711e-03f, -2.19553534e-03f, -2.47065402e-03f, - -2.72279518e-03f, -2.94992092e-03f, -3.15023183e-03f, -3.32214990e-03f, - -3.46435451e-03f, -3.57581566e-03f, -3.65574132e-03f, -3.70363730e-03f, - -3.71929064e-03f, -3.70275212e-03f, -3.65435442e-03f, -3.57474125e-03f, - -3.46473848e-03f, -3.32552683e-03f, -3.15846353e-03f, -2.96515654e-03f, - -2.74746347e-03f, -2.50737272e-03f, -2.24712016e-03f, -1.96906951e-03f, - -1.67571539e-03f, -1.36971428e-03f, -1.05376024e-03f, -7.30644072e-04f, - -4.03206799e-04f, -7.42995897e-05f, 2.53245135e-04f, 5.76588008e-04f, - 8.92968397e-04f, 1.19970438e-03f, 1.49420457e-03f, 1.77402045e-03f, - 2.03680128e-03f, 2.28039302e-03f, 2.50282909e-03f, 2.70229005e-03f, - 2.87722528e-03f, 3.02626345e-03f, 3.14829228e-03f, 3.24241372e-03f, - 3.30798804e-03f, 3.34463320e-03f, 3.35222123e-03f, 3.33084720e-03f, - 3.28088558e-03f, 3.20297004e-03f, 3.09790204e-03f, 2.96678891e-03f, - 2.81092150e-03f, 2.63179675e-03f, 2.43109407e-03f, 2.21069486e-03f, - 1.97261876e-03f, 1.71903709e-03f, 1.45221718e-03f, 1.17455819e-03f, - 8.88520565e-04f, 5.96615677e-04f, 3.01413631e-04f, 5.46569794e-06f, - -2.88648335e-04f, -5.78440455e-04f, -8.61415446e-04f, -1.13516540e-03f, - -1.39741163e-03f, -1.64595773e-03f, -1.87874945e-03f, -2.09387292e-03f, - -2.28959324e-03f, -2.46433942e-03f, -2.61675008e-03f, -2.74564089e-03f, - -2.85005436e-03f, -2.92925341e-03f, -2.98270791e-03f, -3.01012152e-03f, - -3.01144172e-03f, -2.98680121e-03f, -2.93658715e-03f, -2.86141187e-03f, - -2.76205629e-03f, -2.63955281e-03f, -2.49510204e-03f, -2.33009109e-03f, - -2.14606014e-03f, -1.94473859e-03f, -1.72796009e-03f, -1.49770401e-03f, - -1.25602813e-03f, -1.00509543e-03f, -7.47131162e-04f, -4.84384241e-04f, - -2.19190438e-04f, 4.61883980e-05f, 3.09442481e-04f, 5.68335816e-04f, - 8.20650412e-04f, 1.06426195e-03f, 1.29712378e-03f, 1.51732041e-03f, - 1.72299209e-03f, 1.91251660e-03f, 2.08433504e-03f, 2.23708584e-03f, - 2.36958407e-03f, 2.48081558e-03f, 2.56998499e-03f, 2.63642962e-03f, - 2.67976001e-03f, 2.69973545e-03f, 2.69635545e-03f, 2.66978646e-03f, - 2.62041612e-03f, 2.54882653e-03f, 2.45577849e-03f, 2.34219502e-03f, - 2.20921910e-03f, 2.05811735e-03f, 1.89029043e-03f, 1.70732601e-03f, - 1.51087190e-03f, 1.30273238e-03f, 1.08474708e-03f, 8.58888422e-04f, - 6.27141283e-04f, 3.91541843e-04f, 1.54125345e-04f, -8.30221557e-05f, - -3.17874320e-04f, -5.48434822e-04f, -7.72741386e-04f, -9.88897922e-04f, - -1.19510300e-03f, -1.38966446e-03f, -1.57096128e-03f, -1.73754052e-03f, - -1.88804822e-03f, -2.02133530e-03f, -2.13633027e-03f, -2.23217932e-03f, - -2.30820740e-03f, -2.36387261e-03f, -2.39883936e-03f, -2.41294460e-03f, - -2.40621942e-03f, -2.37884693e-03f, -2.33121609e-03f, -2.26385904e-03f, - -2.17751835e-03f, -2.07302810e-03f, -1.95142870e-03f, -1.81390123e-03f, - -1.66170287e-03f, -1.49626799e-03f, -1.31909211e-03f, -1.13178731e-03f, - -9.36049438e-04f, -7.33582746e-04f, -5.26210187e-04f, -3.15727877e-04f, - -1.03964727e-04f, 1.07230526e-04f, 3.16062176e-04f, 5.20749304e-04f, - 7.19556957e-04f, 9.10822165e-04f, 1.09293790e-03f, 1.26442573e-03f, - 1.42387037e-03f, 1.56997858e-03f, 1.70160712e-03f, 1.81770393e-03f, - 1.91739676e-03f, 1.99993376e-03f, 2.06472082e-03f, 2.11132364e-03f, - 2.13948959e-03f, 2.14907506e-03f, 2.14015415e-03f, 2.11291404e-03f, - 2.06772062e-03f, 2.00509948e-03f, 1.92568205e-03f, 1.83030593e-03f, - 1.71988793e-03f, 1.59546278e-03f, 1.45820958e-03f, 1.30941455e-03f, - 1.15041754e-03f, 9.82655662e-04f, 8.07633897e-04f, 6.26913392e-04f, - 4.42086406e-04f, 2.54752525e-04f, 6.65589815e-05f, -1.20878459e-04f, - -3.05964268e-04f, -4.87118900e-04f, -6.62815511e-04f, -8.31597430e-04f, - -9.92029288e-04f, -1.14283171e-03f, -1.28276198e-03f, -1.41069924e-03f, - -1.52563857e-03f, -1.62665705e-03f, -1.71301571e-03f, -1.78407215e-03f, - -1.83932486e-03f, -1.87840593e-03f, -1.90110668e-03f, -1.90733981e-03f, - -1.89718173e-03f, -1.87081315e-03f, -1.82861635e-03f, -1.77102421e-03f, - -1.69867585e-03f, -1.61227322e-03f, -1.51267564e-03f, -1.40081900e-03f, - -1.27776296e-03f, -1.14464853e-03f, -1.00266848e-03f, -8.53125745e-04f, - -6.97343266e-04f, -5.36715682e-04f, -3.72641111e-04f, -2.06566113e-04f, - -3.99112362e-05f, 1.25872577e-04f, 2.89379042e-04f, 4.49221338e-04f, - 6.04060361e-04f, 7.52597124e-04f, 8.93603965e-04f, 1.02593625e-03f, - 1.14851696e-03f, 1.26037089e-03f, 1.36060965e-03f, 1.44847187e-03f, - 1.52327677e-03f, 1.58450468e-03f, 1.63170530e-03f, 1.66459341e-03f, - 1.68299465e-03f, 1.68684492e-03f, 1.67622052e-03f, 1.65133740e-03f, - 1.61248307e-03f, 1.56013086e-03f, 1.49479356e-03f, 1.41715103e-03f, - 1.32795375e-03f, 1.22803948e-03f, 1.11836065e-03f, 9.99922127e-04f, - 8.73805232e-04f, 7.41131956e-04f, 6.03105296e-04f, 4.60940344e-04f, - 3.15890241e-04f, 1.69211261e-04f, 2.21743638e-05f, -1.23952607e-04f, - -2.67936295e-04f, -4.08555731e-04f, -5.44640381e-04f, -6.75036718e-04f, - -7.98694471e-04f, -9.14605111e-04f, -1.02181314e-03f, -1.11948762e-03f, - -1.20686651e-03f, -1.28326662e-03f, -1.34811836e-03f, -1.40096877e-03f, - -1.44142571e-03f, -1.46927100e-03f, -1.48434461e-03f, -1.48661782e-03f, - -1.47616538e-03f, -1.45317443e-03f, -1.41795006e-03f, -1.37085590e-03f, - -1.31241749e-03f, -1.24319769e-03f, -1.16388507e-03f, -1.07522322e-03f, - -9.78051491e-04f, -8.73267846e-04f, -7.61808745e-04f, -6.44689116e-04f, - -5.22962242e-04f, -3.97698841e-04f, -2.69974946e-04f, -1.40936535e-04f, - -1.16687372e-05f, 1.16707935e-04f, 2.43105542e-04f, 3.66459900e-04f, - 4.85746921e-04f, 5.99973582e-04f, 7.08198423e-04f, 8.09540404e-04f, - 9.03214311e-04f, 9.88445526e-04f, 1.06458286e-03f, 1.13105319e-03f, - 1.18736348e-03f, 1.23309711e-03f, 1.26795195e-03f, 1.29173611e-03f, - 1.30429959e-03f, 1.30564635e-03f, 1.29584484e-03f, 1.27505558e-03f, - 1.24356178e-03f, 1.20169119e-03f, 1.14990793e-03f, 1.08871802e-03f, - 1.01870853e-03f, 9.40552377e-04f, 8.55007232e-04f, 7.62816811e-04f, - 6.64843157e-04f, 5.61968820e-04f, 4.55113887e-04f, 3.45206551e-04f, - 2.33202943e-04f, 1.20101771e-04f, 6.86134614e-06f, -1.05554304e-04f, - -2.16195795e-04f, -3.24112900e-04f, -4.28434961e-04f, -5.28276628e-04f, - -6.22838378e-04f, -7.11351653e-04f, -7.93096664e-04f, -8.67456763e-04f, - -9.33831175e-04f, -9.91726329e-04f, -1.04072669e-03f, -1.08046986e-03f, - -1.11070332e-03f, -1.13122472e-03f, -1.14196584e-03f, -1.14289978e-03f, - -1.13408364e-03f, -1.11569239e-03f, -1.08794173e-03f, -1.05115450e-03f, - -1.00570315e-03f, -9.52066366e-04f, -8.90742618e-04f, -8.22333877e-04f, - -7.47460323e-04f, -6.66834457e-04f, -5.81183573e-04f, -4.91248607e-04f, - -3.97865398e-04f, -3.01852004e-04f, -2.04027600e-04f, -1.05245839e-04f, - -6.36777404e-06f, 9.17617553e-05f, 1.88340766e-04f, 2.82546451e-04f, - 3.73570554e-04f, 4.60711065e-04f, 5.43222306e-04f, 6.20446879e-04f, - 6.91790312e-04f, 7.56668845e-04f, 8.14584433e-04f, 8.65136460e-04f, - 9.07903855e-04f, 9.42617554e-04f, 9.69039487e-04f, 9.87009408e-04f, - 9.96454207e-04f, 9.97361571e-04f, 9.89773454e-04f, 9.73845965e-04f, - 9.49773639e-04f, 9.17830053e-04f, 8.78358737e-04f, 8.31731409e-04f, - 7.78436246e-04f, 7.18952835e-04f, 6.53849580e-04f, 5.83726405e-04f, - 5.09215445e-04f, 4.30986185e-04f, 3.49740961e-04f, 2.66183564e-04f, - 1.81053864e-04f, 9.50814188e-05f, 9.00101989e-06f, -7.64476466e-05f, - -1.60555268e-04f, -2.42615492e-04f, -3.21939784e-04f, -3.97891256e-04f, - -4.69842651e-04f, -5.37218972e-04f, -5.99490711e-04f, -6.56157341e-04f, - -7.06805747e-04f, -7.51040629e-04f, -7.88542406e-04f, -8.19057673e-04f, - -8.42365219e-04f, -8.58354952e-04f, -8.66924438e-04f, -8.68087147e-04f, - -8.61872021e-04f, -8.48416980e-04f, -8.27864530e-04f, -8.00485643e-04f, - -7.66529791e-04f, -7.26368966e-04f, -6.80390151e-04f, -6.29012607e-04f, - -5.72740364e-04f, -5.12074275e-04f, -4.47577967e-04f, -3.79824551e-04f, - -3.09404546e-04f, -2.36955845e-04f, -1.63096797e-04f, -8.84666689e-05f, - -1.36918345e-05f, 6.05605282e-05f, 1.33706352e-04f, 2.05104934e-04f, - 2.74177775e-04f, 3.40364816e-04f, 4.03127428e-04f, 4.61941353e-04f, - 5.16384122e-04f, 5.65987864e-04f, 6.10406960e-04f, 6.49289729e-04f, - 6.82362251e-04f, 7.09386220e-04f, 7.30190172e-04f, 7.44646203e-04f, - 7.52685452e-04f, 7.54304020e-04f, 7.49522579e-04f, 7.38444760e-04f, - 7.21207483e-04f, 6.98036730e-04f, 6.69144529e-04f, 6.34844810e-04f, - 5.95456793e-04f, 5.51362735e-04f, 5.02982434e-04f, 4.50740873e-04f, - 3.95141218e-04f, 3.36652582e-04f, 2.75799155e-04f, 2.13134574e-04f, - 1.49173607e-04f, 8.44743226e-05f, 1.96125552e-05f, -4.48903541e-05f, - -1.08473952e-04f, -1.70630967e-04f, -2.30822756e-04f, -2.88566894e-04f, - -3.43417761e-04f, -3.94905833e-04f, -4.42640702e-04f, -4.86249354e-04f, - -5.25408193e-04f, -5.59793704e-04f, -5.89180289e-04f, -6.13368302e-04f, - -6.32178408e-04f, -6.45490725e-04f, -6.53274170e-04f, -6.55472793e-04f, - -6.52128126e-04f, -6.43307606e-04f, -6.29155845e-04f, -6.09800934e-04f, - -5.85463412e-04f, -5.56409754e-04f, -5.22887459e-04f, -4.85231865e-04f, - -4.43797790e-04f, -3.98970397e-04f, -3.51128444e-04f, -3.00728426e-04f, - -2.48188000e-04f, -1.94019174e-04f, -1.38619235e-04f, -8.25046619e-05f, - -2.61663235e-05f, 2.99583710e-05f, 8.53795123e-05f, 1.39627331e-04f, - 1.92270974e-04f, 2.42876498e-04f, 2.91041116e-04f, 3.36365129e-04f, - 3.78493606e-04f, 4.17129701e-04f, 4.51931766e-04f, 4.82649784e-04f, - 5.09080493e-04f, 5.31030056e-04f, 5.48333695e-04f, 5.60878484e-04f, - 5.68641598e-04f, 5.71552610e-04f, 5.69629306e-04f, 5.62942331e-04f, - 5.51586568e-04f, 5.35680325e-04f, 5.15392595e-04f, 4.90931349e-04f, - 4.62558320e-04f, 4.30500957e-04f, 3.95081151e-04f, 3.56619808e-04f, - 3.15458928e-04f, 2.71954945e-04f, 2.26519129e-04f, 1.79516051e-04f, - 1.31357899e-04f, 8.24572190e-05f, 3.32391965e-05f, -1.58850698e-05f, - -6.45330169e-05f, -1.12264134e-04f, -1.58698628e-04f, -2.03467556e-04f, - -2.46210106e-04f, -2.86570115e-04f, -3.24236629e-04f, -3.58912356e-04f, - -3.90340467e-04f, -4.18264108e-04f, -4.42494467e-04f, -4.62859927e-04f, - -4.79201468e-04f, -4.91408046e-04f, -4.99443631e-04f, -5.03240684e-04f, - -5.02785830e-04f, -4.98157139e-04f, -4.89378704e-04f, -4.76587119e-04f, - -4.59890738e-04f, -4.39477548e-04f, -4.15523795e-04f, -3.88271943e-04f, - -3.57945858e-04f, -3.24835243e-04f, -2.89240231e-04f, -2.51465546e-04f, - -2.11835672e-04f, -1.70699525e-04f, -1.28404932e-04f, -8.52894686e-05f, - -4.17402676e-05f, 1.86488651e-06f, 4.51992598e-05f, 8.79090103e-05f, - 1.29605134e-04f, 1.69965889e-04f, 2.08696862e-04f, 2.45456482e-04f, - 2.79955019e-04f, 3.11933102e-04f, 3.41137711e-04f, 3.67347210e-04f, - 3.90354753e-04f, 4.10008585e-04f, 4.26152950e-04f, 4.38673341e-04f, - 4.47495015e-04f, 4.52569681e-04f, 4.53871341e-04f, 4.51401451e-04f, - 4.45215411e-04f, 4.35379482e-04f, 4.22000265e-04f, 4.05191759e-04f, - 3.85119408e-04f, 3.61974661e-04f, 3.35944547e-04f, 3.07269134e-04f, - 2.76178449e-04f, 2.42964749e-04f, 2.07892199e-04f, 1.71254500e-04f, - 1.33357821e-04f, 9.45229736e-05f, 5.50557762e-05f, 1.52985188e-05f, - -2.44379242e-05f, -6.38226873e-05f, -1.02547166e-04f, -1.40299443e-04f, - -1.76768344e-04f, -2.11670093e-04f, -2.44743896e-04f, -2.75718512e-04f, - -3.04347022e-04f, -3.30418232e-04f, -3.53736841e-04f, -3.74109356e-04f, - -3.91381845e-04f, -4.05451309e-04f, -4.16191977e-04f, -4.23521256e-04f, - -4.27426658e-04f, -4.27869490e-04f, -4.24853386e-04f, -4.18413250e-04f, - -4.08611901e-04f, -3.95543058e-04f, -3.79292301e-04f, -3.60028810e-04f, - -3.37902489e-04f, -3.13061225e-04f, -2.85740223e-04f, -2.56168414e-04f, - -2.24556060e-04f, -1.91176716e-04f, -1.56272512e-04f, -1.20139890e-04f, - -8.30537602e-05f, -4.52873563e-05f, -7.15972468e-06f, 3.10302032e-05f, - 6.90244932e-05f, 1.06496284e-04f, 1.43158198e-04f, 1.78736255e-04f, - 2.12976701e-04f, 2.45591364e-04f, 2.76326944e-04f, 3.04976111e-04f, - 3.31299044e-04f, 3.55114336e-04f, 3.76239459e-04f, 3.94517329e-04f, - 4.09785367e-04f, 4.21936769e-04f, 4.30916344e-04f, 4.36588118e-04f, - 4.38939238e-04f, 4.37964002e-04f, 4.33639999e-04f, 4.26009328e-04f, - 4.15120198e-04f, 4.01062409e-04f, 3.83911295e-04f, 3.63806383e-04f, - 3.40873899e-04f, 3.15295099e-04f, 2.87229071e-04f, 2.56841831e-04f, - 2.24418352e-04f, 1.90132129e-04f, 1.54208573e-04f, 1.16966099e-04f, - 7.85931871e-05f, 3.94169348e-05f, -3.38391999e-07f, -4.03917338e-05f, - -8.04238542e-05f, -1.20226558e-04f, -1.59470944e-04f, -1.97919204e-04f, - -2.35294348e-04f, -2.71326824e-04f, -3.05778818e-04f, -3.38410918e-04f, - -3.69010644e-04f, -3.97338842e-04f, -4.23216844e-04f, -4.46466259e-04f, - -4.66912010e-04f, -4.84405189e-04f, -4.98827952e-04f, -5.10071530e-04f, - -5.18032256e-04f, -5.22640255e-04f, -5.23881412e-04f, -5.21676098e-04f, - -5.16039363e-04f, -5.06992324e-04f, -4.94563784e-04f, -4.78787143e-04f, - -4.59750953e-04f, -4.37555727e-04f, -4.12275557e-04f, -3.84054035e-04f, - -3.53037193e-04f, -3.19340180e-04f, -2.83173899e-04f, -2.44687364e-04f, - -2.04094207e-04f, -1.61583244e-04f, -1.17361228e-04f, -7.16348417e-05f, - -2.46348477e-05f, 2.33922164e-05f, 7.22418000e-05f, 1.21684779e-04f, - 1.71499457e-04f, 2.21438013e-04f, 2.71280140e-04f, 3.20801296e-04f, - 3.69771761e-04f, 4.18013477e-04f, 4.65284057e-04f, 5.11428788e-04f, - 5.56212641e-04f, 5.99478253e-04f, 6.41075472e-04f, 6.80832949e-04f, - 7.18609100e-04f, 7.54279009e-04f, 7.87742278e-04f, 8.18871508e-04f, - 8.47567713e-04f, 8.73805352e-04f, 8.97474148e-04f, 9.18529976e-04f, - 9.36959592e-04f, 9.52736827e-04f, 9.65854080e-04f, 9.76300491e-04f, - 9.84128104e-04f, 9.89353301e-04f, 9.92012052e-04f, 9.92188548e-04f, - 9.89909273e-04f, 9.85280796e-04f, 9.78335267e-04f, 9.69211001e-04f, - 9.58007113e-04f, 9.44804463e-04f, 9.29714666e-04f, 9.12874477e-04f, - 8.94419257e-04f, 8.74438162e-04f, 8.53087607e-04f, 8.30499113e-04f, - 8.06785316e-04f, 7.82049426e-04f, 7.56478510e-04f, 7.30171081e-04f, - 7.03266226e-04f, 6.75883876e-04f, 6.48150302e-04f, 6.20186681e-04f, - 5.92085453e-04f, 5.63985129e-04f, 5.35999572e-04f, 5.08203069e-04f, - 4.80689533e-04f, 4.53557971e-04f, 4.26884566e-04f, 4.00740812e-04f, - 3.75236819e-04f, 3.50353190e-04f, 3.26243777e-04f, 3.02893629e-04f, - 2.80331434e-04f, 2.58652176e-04f, 2.37852072e-04f, 2.17971034e-04f, - 1.99026311e-04f, 1.81011783e-04f, 1.63957631e-04f, 1.47844848e-04f, - 1.32718875e-04f, 1.18546172e-04f, 1.05256179e-04f, 9.29127235e-05f, - 8.14745498e-05f, 7.08726925e-05f, 6.11573299e-05f, 5.22357210e-05f, - 4.41150988e-05f, 3.67197275e-05f, 3.01315396e-05f, 2.41484723e-05f, - 1.88541281e-05f, 1.41686879e-05f, 1.00524473e-05f, 6.50288873e-06f, - 3.38594106e-06f, 7.66607975e-07f, -1.44302379e-06f, -3.26787635e-06f, - -4.78247665e-06f, -5.93452415e-06f, -6.76352831e-06f, -7.34758715e-06f, - -7.79331112e-06f, -7.91311421e-06f, -7.86244933e-06f, -7.86157694e-06f, - -7.64215127e-06f, -7.28290836e-06f, -6.81887853e-06f, -6.49158597e-06f, - -6.02222593e-06f, -5.26738395e-06f, -5.09005650e-06f, -1.73022428e-05f, + 0.00000000e+00f, 2.57738229e-05f, 2.28312635e-05f, 3.29301720e-05f, + 4.62792766e-05f, 6.28392813e-05f, 8.34298526e-05f, 1.09345366e-04f, + 1.40765613e-04f, 1.79085823e-04f, 2.25515927e-04f, 2.80686140e-04f, + 3.46440184e-04f, 4.24213060e-04f, 5.15679758e-04f, 6.22703072e-04f, + 7.47248606e-04f, 8.91648830e-04f, 1.05819097e-03f, 1.24970360e-03f, + 1.46896184e-03f, 1.71909900e-03f, 2.00352112e-03f, 2.32585325e-03f, + 2.69004589e-03f, 3.10009770e-03f, 3.56066709e-03f, 4.07650766e-03f, + 4.65266984e-03f, 5.29443820e-03f, 6.00761218e-03f, 6.79817892e-03f, + 7.67241666e-03f, 8.63705786e-03f, 9.69902462e-03f, 1.08655464e-02f, + 1.21441926e-02f, 1.35431147e-02f, 1.50703831e-02f, 1.67342248e-02f, + 1.85434518e-02f, 2.05073885e-02f, 2.26351995e-02f, 2.49359480e-02f, + 2.74195152e-02f, 3.00957201e-02f, 3.29746797e-02f, 3.60660148e-02f, + 3.93800865e-02f, 4.29269667e-02f, 4.67167355e-02f, 5.07595322e-02f, + 5.50652027e-02f, 5.96435730e-02f, 6.45041914e-02f, 6.96563995e-02f, + 7.51092741e-02f, 8.08713050e-02f, 8.69506086e-02f, 9.33550143e-02f, + 1.00091521e-01f, 1.07166524e-01f, 1.14585856e-01f, 1.22354427e-01f, + 1.30476332e-01f, 1.38954781e-01f, 1.47791858e-01f, 1.56988836e-01f, + 1.66545712e-01f, 1.76461162e-01f, 1.86732857e-01f, 1.97356887e-01f, + 2.08328235e-01f, 2.19640042e-01f, 2.31284315e-01f, 2.43251224e-01f, + 2.55529580e-01f, 2.68106380e-01f, 2.80966931e-01f, 2.94094913e-01f, + 3.07472157e-01f, 3.21078662e-01f, 3.34892936e-01f, 3.48891418e-01f, + 3.63048947e-01f, 3.77338339e-01f, 3.91731016e-01f, 4.06196375e-01f, + 4.20702327e-01f, 4.35214921e-01f, 4.49698829e-01f, 4.64117192e-01f, + 4.78431501e-01f, 4.92602156e-01f, 5.06588058e-01f, 5.20347244e-01f, + 5.33836291e-01f, 5.47011324e-01f, 5.59827304e-01f, 5.72238858e-01f, + 5.84199812e-01f, 5.95663881e-01f, 6.06584530e-01f, 6.16915479e-01f, + 6.26610227e-01f, 6.35623009e-01f, 6.43908415e-01f, 6.51422044e-01f, + 6.58120303e-01f, 6.63960857e-01f, 6.68902787e-01f, 6.72906783e-01f, + 6.75935360e-01f, 6.77953091e-01f, 6.78926764e-01f, 6.78825652e-01f, + 6.77621638e-01f, 6.75289589e-01f, 6.71807256e-01f, 6.67155714e-01f, + 6.61319462e-01f, 6.54286514e-01f, 6.46048652e-01f, 6.36601561e-01f, + 6.25944910e-01f, 6.14082478e-01f, 6.01022343e-01f, 5.86776774e-01f, + 5.71362584e-01f, 5.54800895e-01f, 5.37117377e-01f, 5.18342181e-01f, + 4.98509921e-01f, 4.77659701e-01f, 4.55834999e-01f, 4.33083714e-01f, + 4.09457911e-01f, 3.85013844e-01f, 3.59811788e-01f, 3.33915906e-01f, + 3.07393970e-01f, 2.80317366e-01f, 2.52760583e-01f, 2.24801315e-01f, + 1.96519969e-01f, 1.67999385e-01f, 1.39324761e-01f, 1.10583043e-01f, + 8.18628436e-02f, 5.32540056e-02f, 2.48471803e-02f, -3.26636649e-03f, + -3.09952967e-02f, -5.82485562e-02f, -8.49355930e-02f, -1.10967034e-01f, + -1.36254903e-01f, -1.60712966e-01f, -1.84257387e-01f, -2.06806776e-01f, + -2.28282907e-01f, -2.48610910e-01f, -2.67719669e-01f, -2.85542260e-01f, + -3.02016257e-01f, -3.17084071e-01f, -3.30693194e-01f, -3.42796661e-01f, + -3.53353212e-01f, -3.62327576e-01f, -3.69690653e-01f, -3.75419813e-01f, + -3.79499075e-01f, -3.81919103e-01f, -3.82677491e-01f, -3.81778733e-01f, + -3.79234384e-01f, -3.75063017e-01f, -3.69290152e-01f, -3.61948304e-01f, + -3.53076910e-01f, -3.42722096e-01f, -3.30936620e-01f, -3.17779633e-01f, + -3.03316514e-01f, -2.87618587e-01f, -2.70762756e-01f, -2.52831320e-01f, + -2.33911539e-01f, -2.14095259e-01f, -1.93478520e-01f, -1.72161169e-01f, + -1.50246285e-01f, -1.27839839e-01f, -1.05050082e-01f, -8.19871599e-02f, + -5.87624360e-02f, -3.54880619e-02f, -1.22764049e-02f, 1.07605263e-02f, + 3.35116028e-02f, 5.58671830e-02f, 7.77196474e-02f, 9.89638589e-02f, + 1.19497902e-01f, 1.39223354e-01f, 1.58046039e-01f, 1.75876344e-01f, + 1.92629792e-01f, 2.08227445e-01f, 2.22596376e-01f, 2.35669935e-01f, + 2.47388321e-01f, 2.57698757e-01f, 2.66555789e-01f, 2.73921619e-01f, + 2.79766215e-01f, 2.84067669e-01f, 2.86812042e-01f, 2.87993788e-01f, + 2.87615536e-01f, 2.85688209e-01f, 2.82230951e-01f, 2.77271050e-01f, + 2.70843807e-01f, 2.62992310e-01f, 2.53767274e-01f, 2.43226727e-01f, + 2.31435732e-01f, 2.18465973e-01f, 2.04395453e-01f, 1.89308050e-01f, + 1.73292986e-01f, 1.56444403e-01f, 1.38860793e-01f, 1.20644581e-01f, + 1.01901339e-01f, 8.27393357e-02f, 6.32689072e-02f, 4.36018454e-02f, + 2.38507071e-02f, 4.12822827e-03f, -1.54533490e-02f, -3.47829031e-02f, + -5.37510504e-02f, -7.22508561e-02f, -9.01782817e-02f, -1.07433017e-01f, + -1.23918854e-01f, -1.39544366e-01f, -1.54223358e-01f, -1.67875437e-01f, + -1.80426472e-01f, -1.91808926e-01f, -2.01962423e-01f, -2.10833914e-01f, + -2.18378136e-01f, -2.24557777e-01f, -2.29343716e-01f, -2.32715250e-01f, + -2.34660116e-01f, -2.35174592e-01f, -2.34263552e-01f, -2.31940408e-01f, + -2.28226909e-01f, -2.23153240e-01f, -2.16757610e-01f, -2.09086092e-01f, + -2.00192330e-01f, -1.90137237e-01f, -1.78988601e-01f, -1.66820607e-01f, + -1.53713424e-01f, -1.39752706e-01f, -1.25029052e-01f, -1.09637434e-01f, + -9.36766468e-02f, -7.72485626e-02f, -6.04577178e-02f, -4.34104123e-02f, + -2.62142727e-02f, -8.97736641e-03f, 8.19224333e-03f, 2.51873938e-02f, + 4.19023475e-02f, 5.82335223e-02f, 7.40800352e-02f, 8.93445817e-02f, + 1.03933643e-01f, 1.17758514e-01f, 1.30735488e-01f, 1.42786597e-01f, + 1.53840027e-01f, 1.63830572e-01f, 1.72700012e-01f, 1.80397490e-01f, + 1.86879846e-01f, 1.92111822e-01f, 1.96066362e-01f, 1.98724630e-01f, + 2.00076290e-01f, 2.00119400e-01f, 1.98860492e-01f, 1.96314478e-01f, + 1.92504587e-01f, 1.87462157e-01f, 1.81226343e-01f, 1.73844017e-01f, + 1.65369327e-01f, 1.55863248e-01f, 1.45393459e-01f, 1.34033511e-01f, + 1.21862692e-01f, 1.08965144e-01f, 9.54296309e-02f, 8.13487144e-02f, + 6.68182119e-02f, 5.19365830e-02f, 3.68042391e-02f, 2.15228293e-02f, + 6.19473181e-03f, -9.07786386e-03f, -2.41934219e-02f, -3.90518897e-02f, + -5.35552556e-02f, -6.76082701e-02f, -8.11190181e-02f, -9.39995712e-02f, + -1.06166560e-01f, -1.17541673e-01f, -1.28052194e-01f, -1.37631580e-01f, + -1.46219738e-01f, -1.53763473e-01f, -1.60216884e-01f, -1.65541564e-01f, + -1.69706914e-01f, -1.72690307e-01f, -1.74477196e-01f, -1.75061256e-01f, + -1.74444314e-01f, -1.72636437e-01f, -1.69655694e-01f, -1.65528167e-01f, + -1.60287634e-01f, -1.53975364e-01f, -1.46639831e-01f, -1.38336334e-01f, + -1.29126633e-01f, -1.19078480e-01f, -1.08265109e-01f, -9.67648277e-02f, + -8.46603321e-02f, -7.20381983e-02f, -5.89882902e-02f, -4.56030440e-02f, + -3.19769405e-02f, -1.82057654e-02f, -4.38589399e-03f, 9.38618442e-03f, + 2.30147873e-02f, 3.64055026e-02f, 4.94659847e-02f, 6.21064640e-02f, + 7.42404823e-02f, 8.57854026e-02f, 9.66630881e-02f, 1.06800214e-01f, + 1.16129062e-01f, 1.24587714e-01f, 1.32120704e-01f, 1.38679150e-01f, + 1.44221352e-01f, 1.48712781e-01f, 1.52126551e-01f, 1.54443364e-01f, + 1.55651872e-01f, 1.55748483e-01f, 1.54737594e-01f, 1.52631324e-01f, + 1.49449613e-01f, 1.45219867e-01f, 1.39976951e-01f, 1.33762695e-01f, + 1.26625732e-01f, 1.18621127e-01f, 1.09809835e-01f, 1.00258461e-01f, + 9.00385966e-02f, 7.92263112e-02f, 6.79017514e-02f, 5.61483242e-02f, + 4.40522753e-02f, 3.17019988e-02f, 1.91873411e-02f, 6.59909466e-03f, + -5.97180657e-03f, -1.84349074e-02f, -3.07007132e-02f, -4.26816417e-02f, + -5.42923896e-02f, -6.54506079e-02f, -7.60775609e-02f, -8.60985825e-02f, + -9.54437408e-02f, -1.04048142e-01f, -1.11852553e-01f, -1.18803711e-01f, + -1.24854813e-01f, -1.29965653e-01f, -1.34103041e-01f, -1.37241039e-01f, + -1.39360993e-01f, -1.40451792e-01f, -1.40509793e-01f, -1.39538986e-01f, + -1.37550804e-01f, -1.34564089e-01f, -1.30604905e-01f, -1.25706354e-01f, + -1.19908276e-01f, -1.13257015e-01f, -1.05804921e-01f, -9.76101298e-02f, + -8.87359691e-02f, -7.92505483e-02f, -6.92262319e-02f, -5.87391125e-02f, + -4.78684160e-02f, -3.66959289e-02f, -2.53053541e-02f, -1.37817249e-02f, + -2.21079428e-03f, 9.32167747e-03f, 2.07305160e-02f, 3.19316883e-02f, + 4.28430566e-02f, 5.33848786e-02f, 6.34804441e-02f, 7.30565856e-02f, + 8.20442897e-02f, 9.03790776e-02f, 9.80016231e-02f, 1.04858052e-01f, + 1.10900371e-01f, 1.16086840e-01f, 1.20382198e-01f, 1.23757969e-01f, + 1.26192651e-01f, 1.27671770e-01f, 1.28188137e-01f, 1.27741675e-01f, + 1.26339596e-01f, 1.23996183e-01f, 1.20732705e-01f, 1.16577307e-01f, + 1.11564669e-01f, 1.05735813e-01f, 9.91377187e-02f, 9.18230275e-02f, + 8.38495092e-02f, 7.52797839e-02f, 6.61806838e-02f, 5.66228090e-02f, + 4.66799931e-02f, 3.64286945e-02f, 2.59474847e-02f, 1.53163689e-02f, + 4.61622490e-03f, -6.07182197e-03f, -1.66669799e-02f, -2.70894704e-02f, + -3.72610297e-02f, -4.71056290e-02f, -5.65498931e-02f, -6.55237625e-02f, + -7.39609699e-02f, -8.17995235e-02f, -8.89821548e-02f, -9.54568508e-02f, + -1.01177041e-01f, -1.06102108e-01f, -1.10197566e-01f, -1.13435384e-01f, + -1.15794171e-01f, -1.17259227e-01f, -1.17822757e-01f, -1.17483887e-01f, + -1.16248548e-01f, -1.14129572e-01f, -1.11146430e-01f, -1.07325180e-01f, + -1.02698169e-01f, -9.73037750e-02f, -9.11861728e-02f, -8.43949139e-02f, + -7.69845152e-02f, -6.90140891e-02f, -6.05468325e-02f, -5.16495384e-02f, + -4.23921120e-02f, -3.28470026e-02f, -2.30885659e-02f, -1.31926321e-02f, + -3.23579390e-03f, 6.70506976e-03f, 1.65535306e-02f, 2.62340587e-02f, + 3.56726723e-02f, 4.47975155e-02f, 5.35393359e-02f, 6.18320891e-02f, + 6.96133711e-02f, 7.68249575e-02f, 8.34132047e-02f, 8.93294053e-02f, + 9.45302615e-02f, 9.89780776e-02f, 1.02641187e-01f, 1.05494003e-01f, + 1.07517350e-01f, 1.08698506e-01f, 1.09031319e-01f, 1.08516239e-01f, + 1.07160277e-01f, 1.04976947e-01f, 1.01986161e-01f, 9.82139821e-02f, + 9.36925268e-02f, 8.84595879e-02f, 8.25583806e-02f, 7.60371894e-02f, + 6.89489402e-02f, 6.13508561e-02f, 5.33039225e-02f, 4.48724192e-02f, + 3.61234643e-02f, 2.71263730e-02f, 1.79522593e-02f, 8.67332814e-03f, + -6.37560549e-04f, -9.90757623e-03f, -1.90643762e-02f, -2.80367915e-02f, + -3.67552453e-02f, -4.51524120e-02f, -5.31636754e-02f, -6.07276053e-02f, + -6.77865076e-02f, -7.42868063e-02f, -8.01794199e-02f, -8.54202472e-02f, + -8.99703936e-02f, -9.37965226e-02f, -9.68710320e-02f, -9.91723636e-02f, + -1.00685055e-01f, -1.01399924e-01f, -1.01314027e-01f, -1.00430752e-01f, + -9.87597996e-02f, -9.63169323e-02f, -9.31240228e-02f, -8.92087380e-02f, + -8.46043840e-02f, -7.93495604e-02f, -7.34879129e-02f, -6.70676790e-02f, + -6.01414310e-02f, -5.27655243e-02f, -4.49997042e-02f, -3.69066235e-02f, + -2.85513234e-02f, -2.00007483e-02f, -1.13231172e-02f, -2.58753819e-03f, + 6.13671174e-03f, 1.47805601e-02f, 2.32758739e-02f, 3.15558319e-02f, + 3.95555353e-02f, 4.72125037e-02f, 5.44671546e-02f, 6.12632712e-02f, + 6.75484439e-02f, 7.32744268e-02f, 7.83976489e-02f, 8.28793328e-02f, + 8.66860430e-02f, 8.97896293e-02f, 9.21678120e-02f, 9.38039664e-02f, + 9.46875290e-02f, 9.48139007e-02f, 9.41845125e-02f, 9.28068505e-02f, + 9.06942851e-02f, 8.78660470e-02f, 8.43469508e-02f, 8.01672994e-02f, + 7.53625613e-02f, 6.99730444e-02f, 6.40436219e-02f, 5.76234074e-02f, + 5.07651752e-02f, 4.35251559e-02f, 3.59623612e-02f, 2.81382801e-02f, + 2.01163116e-02f, 1.19611978e-02f, 3.73860852e-03f, -4.48544815e-03f, + -1.26451529e-02f, -2.06753686e-02f, -2.85122123e-02f, -3.60935203e-02f, + -4.33593322e-02f, -5.02524350e-02f, -5.67187066e-02f, -6.27076379e-02f, + -6.81726899e-02f, -7.30716527e-02f, -7.73669645e-02f, -8.10260558e-02f, + -8.40214980e-02f, -8.63313064e-02f, -8.79390729e-02f, -8.88340404e-02f, + -8.90112500e-02f, -8.84714905e-02f, -8.72213317e-02f, -8.52730391e-02f, + -8.26444808e-02f, -7.93588812e-02f, -7.54447661e-02f, -7.09355706e-02f, + -6.58695010e-02f, -6.02890903e-02f, -5.42408964e-02f, -4.77751478e-02f, + -4.09452872e-02f, -3.38075119e-02f, -2.64204001e-02f, -1.88443271e-02f, + -1.11410841e-02f, -3.37322640e-03f, 4.39625224e-03f, 1.21045621e-02f, + 1.96895966e-02f, 2.70903872e-02f, 3.42476479e-02f, 4.11042063e-02f, + 4.76055071e-02f, 5.36999666e-02f, 5.93395286e-02f, 6.44798549e-02f, + 6.90808373e-02f, 7.31067984e-02f, 7.65268692e-02f, 7.93151321e-02f, + 8.14508652e-02f, 8.29187318e-02f, 8.37087874e-02f, 8.38166939e-02f, + 8.32435667e-02f, 8.19961230e-02f, 8.00865044e-02f, 7.75321668e-02f, + 7.43557925e-02f, 7.05850463e-02f, 6.62523340e-02f, 6.13945573e-02f, + 5.60527587e-02f, 5.02718197e-02f, 4.41000820e-02f, 3.75889077e-02f, + 3.07923072e-02f, 2.37664500e-02f, 1.65692144e-02f, 9.25974471e-03f, + 1.89789131e-03f, -5.45616102e-03f, -1.27425262e-02f, -1.99019879e-02f, + -2.68765329e-02f, -3.36098353e-02f, -4.00476211e-02f, -4.61382887e-02f, + -5.18330845e-02f, -5.70866854e-02f, -6.18574768e-02f, -6.61078954e-02f, + -6.98047314e-02f, -7.29193713e-02f, -7.54280733e-02f, -7.73120518e-02f, + -7.85577193e-02f, -7.91567321e-02f, -7.91060672e-02f, -7.84079778e-02f, + -7.70700917e-02f, -7.51051477e-02f, -7.25310474e-02f, -6.93706386e-02f, + -6.56514718e-02f, -6.14056206e-02f, -5.66693718e-02f, -5.14829473e-02f, + -4.58901735e-02f, -3.99380331e-02f, -3.36763702e-02f, -2.71574389e-02f, + -2.04354475e-02f, -1.35661532e-02f, -6.60630727e-03f, 3.86646824e-04f, + 7.35520973e-03f, 1.42422280e-02f, 2.09913641e-02f, 2.75475284e-02f, + 3.38574221e-02f, 3.98698307e-02f, 4.55362181e-02f, 5.08109216e-02f, + 5.56516759e-02f, 6.00198762e-02f, 6.38809158e-02f, 6.72044395e-02f, + 6.99645791e-02f, 7.21402152e-02f, 7.37150597e-02f, 7.46778107e-02f, + 7.50222360e-02f, 7.47472565e-02f, 7.38568363e-02f, 7.23600417e-02f, + 7.02708761e-02f, 6.76082238e-02f, 6.43956576e-02f, 6.06611745e-02f, + 5.64370176e-02f, 5.17594495e-02f, 4.66682739e-02f, 4.12066978e-02f, + 3.54208167e-02f, 2.93593188e-02f, 2.30730217e-02f, 1.66144782e-02f, + 1.00375317e-02f, 3.39684147e-03f, -3.25251124e-03f, -9.85551584e-03f, + -1.63577490e-02f, -2.27056595e-02f, -2.88471998e-02f, -3.47320840e-02f, + -4.03123540e-02f, -4.55426353e-02f, -5.03805924e-02f, -5.47872529e-02f, + -5.87272646e-02f, -6.21693020e-02f, -6.50861771e-02f, -6.74551714e-02f, + -6.92581408e-02f, -7.04816306e-02f, -7.11171304e-02f, -7.11609040e-02f, + -7.06142341e-02f, -6.94832169e-02f, -6.77788399e-02f, -6.55167566e-02f, + -6.27172654e-02f, -5.94050389e-02f, -5.56089420e-02f, -5.13618140e-02f, + -4.67001077e-02f, -4.16636667e-02f, -3.62953408e-02f, -3.06405937e-02f, + -2.47472033e-02f, -1.86647681e-02f, -1.24443758e-02f, -6.13808338e-03f, + 2.01411978e-04f, 6.52133427e-03f, 1.27691320e-02f, 1.88930538e-02f, + 2.48424465e-02f, 3.05682613e-02f, 3.60234752e-02f, 4.11633315e-02f, + 4.59459248e-02f, 5.03323304e-02f, 5.42870835e-02f, 5.77784019e-02f, + 6.07783651e-02f, 6.32633288e-02f, 6.52139121e-02f, 6.66152616e-02f, + 6.74571587e-02f, 6.77340253e-02f, 6.74450634e-02f, 6.65941743e-02f, + 6.51898969e-02f, 6.32454230e-02f, 6.07783949e-02f, 5.78107648e-02f, + 5.43686030e-02f, 5.04819132e-02f, 4.61842717e-02f, 4.15126988e-02f, + 3.65071237e-02f, 3.12102820e-02f, 2.56671547e-02f, 1.99247189e-02f, + 1.40314897e-02f, 8.03710981e-03f, 1.99194113e-03f, -4.05328806e-03f, + -1.00480950e-02f, -1.59424027e-02f, -2.16871978e-02f, -2.72348278e-02f, + -3.25393096e-02f, -3.75569641e-02f, -4.22464745e-02f, -4.65694440e-02f, + -5.04906287e-02f, -5.39782262e-02f, -5.70041442e-02f, -5.95442285e-02f, + -6.15784134e-02f, -6.30910059e-02f, -6.40706329e-02f, -6.45104738e-02f, + -6.44081853e-02f, -6.37660587e-02f, -6.25908310e-02f, -6.08937512e-02f, + -5.86903214e-02f, -5.60003749e-02f, -5.28477193e-02f, -4.92599533e-02f, + -4.52683132e-02f, -4.09073183e-02f, -3.62145264e-02f, -3.12301828e-02f, + -2.59968465e-02f, -2.05591356e-02f, -1.49632303e-02f, -9.25651553e-03f, + -3.48724314e-03f, 2.29598571e-03f, 8.04450724e-03f, 1.37101015e-02f, + 1.92453689e-02f, 2.46040942e-02f, 2.97416606e-02f, 3.46154341e-02f, + 3.91850779e-02f, 4.34129264e-02f, 4.72642978e-02f, 5.07076760e-02f, + 5.37151661e-02f, 5.62625282e-02f, 5.83294584e-02f, 5.98998097e-02f, + 6.09615551e-02f, 6.15070547e-02f, 6.15329990e-02f, 6.10404716e-02f, + 6.00349135e-02f, 5.85260610e-02f, 5.65279401e-02f, 5.40585286e-02f, + 5.11398898e-02f, 4.77976785e-02f, 4.40611761e-02f, 3.99628438e-02f, + 3.55380989e-02f, 3.08251587e-02f, 2.58644088e-02f, 2.06983747e-02f, + 1.53710739e-02f, 9.92792727e-03f, 4.41510532e-03f, -1.12066218e-03f, + -6.63261302e-03f, -1.20742595e-02f, -1.73998395e-02f, -2.25646758e-02f, + -2.75255332e-02f, -3.22410401e-02f, -3.66719333e-02f, -4.07815241e-02f, + -4.45358322e-02f, -4.79040656e-02f, -5.08586430e-02f, -5.33756630e-02f, + -5.54348806e-02f, -5.70200545e-02f, -5.81188903e-02f, -5.87233379e-02f, + -5.88294685e-02f, -5.84376077e-02f, -5.75522891e-02f, -5.61822154e-02f, + -5.43401522e-02f, -5.20428669e-02f, -4.93108603e-02f, -4.61683834e-02f, + -4.26429808e-02f, -3.87654608e-02f, -3.45695151e-02f, -3.00914369e-02f, + -2.53698514e-02f, -2.04453289e-02f, -1.53600900e-02f, -1.01575989e-02f, + -4.88223250e-03f, 4.21140683e-04f, 5.70749346e-03f, 1.09320714e-02f, + 1.60507423e-02f, 2.10203384e-02f, 2.57991258e-02f, 3.03469891e-02f, + 3.46259681e-02f, 3.86003807e-02f, 4.22372656e-02f, 4.55065977e-02f, + 4.83814916e-02f, 5.08385122e-02f, 5.28578492e-02f, 5.44233532e-02f, + 5.55228686e-02f, 5.61481799e-02f, 5.62951181e-02f, 5.59635641e-02f, + 5.51575059e-02f, 5.38848971e-02f, 5.21577067e-02f, 4.99916630e-02f, + 4.74062222e-02f, 4.44243762e-02f, 4.10723813e-02f, 3.73796334e-02f, + 3.33783371e-02f, 2.91031994e-02f, 2.45912699e-02f, 1.98814471e-02f, + 1.50142456e-02f, 1.00314492e-02f, 4.97569860e-03f, -1.09829558e-04f, + -5.18180429e-03f, -1.01971104e-02f, -1.51132009e-02f, -1.98884909e-02f, + -2.44826770e-02f, -2.88570632e-02f, -3.29749774e-02f, -3.68019407e-02f, + -4.03060834e-02f, -4.34583201e-02f, -4.62326394e-02f, -4.86063256e-02f, + -5.05600942e-02f, -5.20783017e-02f, -5.31490320e-02f, -5.37642601e-02f, + -5.39197625e-02f, -5.36153455e-02f, -5.28546569e-02f, -5.16452744e-02f, + -4.99985519e-02f, -4.79295687e-02f, -4.54569365e-02f, -4.26027299e-02f, + -3.93921382e-02f, -3.58534069e-02f, -3.20174780e-02f, -2.79177659e-02f, + -2.35898897e-02f, -1.90712489e-02f, -1.44009108e-02f, -9.61905551e-03f, + -4.76675190e-03f, 1.14429175e-04f, 4.98275197e-03f, 9.79667060e-03f, + 1.45152450e-02f, 1.90984000e-02f, 2.35073004e-02f, 2.77047166e-02f, + 3.16552879e-02f, 3.53258717e-02f, 3.86857329e-02f, 4.17069009e-02f, + 4.43643859e-02f, 4.66362841e-02f, 4.85040977e-02f, 4.99528118e-02f, + 5.09710058e-02f, 5.15509899e-02f, 5.16888143e-02f, 5.13843182e-02f, + 5.06411841e-02f, 4.94667221e-02f, 4.78719944e-02f, 4.58716454e-02f, + 4.34836680e-02f, 4.07294565e-02f, 3.76333478e-02f, 3.42226856e-02f, + 3.05273460e-02f, 2.65796084e-02f, 2.24138588e-02f, 1.80662406e-02f, + 1.35743725e-02f, 8.97708082e-03f, 4.31392223e-03f, -3.74997817e-04f, + -5.04949488e-03f, -9.66954442e-03f, -1.41957488e-02f, -1.85895102e-02f, + -2.28135517e-02f, -2.68320150e-02f, -3.06110148e-02f, -3.41186844e-02f, + -3.73255948e-02f, -4.02049849e-02f, -4.27328870e-02f, -4.48884826e-02f, + -4.66541442e-02f, -4.80155982e-02f, -4.89621376e-02f, -4.94865911e-02f, + -4.95854066e-02f, -4.92587543e-02f, -4.85103568e-02f, -4.73476557e-02f, + -4.57815259e-02f, -4.38263403e-02f, -4.14997758e-02f, -3.88226280e-02f, + -3.58186618e-02f, -3.25144195e-02f, -2.89389208e-02f, -2.51234952e-02f, + -2.11014173e-02f, -1.69076786e-02f, -1.25787051e-02f, -8.15193430e-03f, + -3.66561199e-03f, 8.41612730e-04f, 5.33096998e-03f, 9.76396982e-03f, + 1.41026633e-02f, 1.83099747e-02f, 2.23500907e-02f, 2.61886650e-02f, + 2.97931947e-02f, 3.31332165e-02f, 3.61806686e-02f, 3.89099840e-02f, + 4.12984711e-02f, 4.33263397e-02f, 4.49769909e-02f, 4.62370906e-02f, + 4.70967034e-02f, 4.75493101e-02f, 4.75919973e-02f, 4.72252655e-02f, + 4.64532495e-02f, 4.52834651e-02f, 4.37268913e-02f, 4.17977928e-02f, + 3.95136051e-02f, 3.68947746e-02f, 3.39645897e-02f, 3.07489848e-02f, + 2.72762475e-02f, 2.35768654e-02f, 1.96831666e-02f, 1.56291178e-02f, + 1.14499678e-02f, 7.18199244e-03f, 2.86208797e-03f, -1.47237323e-03f, + -5.78408986e-03f, -1.00359644e-02f, -1.41915102e-02f, -1.82151627e-02f, + -2.20725868e-02f, -2.57308876e-02f, -2.91590343e-02f, -3.23279893e-02f, + -3.52110559e-02f, -3.77840233e-02f, -4.00254088e-02f, -4.19166660e-02f, + -4.34422559e-02f, -4.45898688e-02f, -4.53504693e-02f, -4.57183342e-02f, + -4.56912080e-02f, -4.52701881e-02f, -4.44598082e-02f, -4.32679041e-02f, + -4.17056221e-02f, -3.97872721e-02f, -3.75301757e-02f, -3.49545539e-02f, + -3.20833642e-02f, -2.89420199e-02f, -2.55582198e-02f, -2.19616927e-02f, + -1.81839563e-02f, -1.42580179e-02f, -1.02180663e-02f, -6.09921811e-03f, + -1.93723037e-03f, 2.23190874e-03f, 6.37220013e-03f, 1.04479531e-02f, + 1.44241290e-02f, 1.82666389e-02f, 2.19425802e-02f, 2.54206248e-02f, + 2.86711138e-02f, 3.16665395e-02f, 3.43815887e-02f, 3.67934228e-02f, + 3.88819070e-02f, 4.06296963e-02f, 4.20224632e-02f, 4.30489649e-02f, + 4.37011440e-02f, 4.39741987e-02f, 4.38666105e-02f, 4.33801492e-02f, + 4.25198834e-02f, 4.12940568e-02f, 3.97140893e-02f, 3.77944134e-02f, + 3.55523815e-02f, 3.30080847e-02f, 3.01842181e-02f, 2.71057696e-02f, + 2.37999951e-02f, 2.02958932e-02f, 1.66242890e-02f, 1.28172569e-02f, + 8.90804027e-03f, 4.93068765e-03f, 9.19732115e-04f, -3.09003828e-03f, + -7.06392168e-03f, -1.09676549e-02f, -1.47675919e-02f, -1.84310619e-02f, + -2.19267124e-02f, -2.52246331e-02f, -2.82967223e-02f, -3.11168905e-02f, + -3.36612820e-02f, -3.59084899e-02f, -3.78397204e-02f, -3.94389199e-02f, + -4.06930177e-02f, -4.15918929e-02f, -4.21285586e-02f, -4.22991498e-02f, + -4.21030212e-02f, -4.15426637e-02f, -4.06237373e-02f, -3.93549944e-02f, + -3.77482044e-02f, -3.58180208e-02f, -3.35818746e-02f, -3.10598205e-02f, + -2.82743551e-02f, -2.52501753e-02f, -2.20140228e-02f, -1.85944012e-02f, + -1.50213539e-02f, -1.13261978e-02f, -7.54120713e-03f, -3.69942331e-03f, + 1.65761761e-04f, 4.02077827e-03f, 7.83220364e-03f, 1.15671267e-02f, + 1.51932941e-02f, 1.86795257e-02f, 2.19958878e-02f, 2.51139844e-02f, + 2.80072326e-02f, 3.06510161e-02f, 3.30229521e-02f, 3.51030581e-02f, + 3.68739519e-02f, 3.83209200e-02f, 3.94321479e-02f, 4.01987038e-02f, + 4.06147205e-02f, 4.06773379e-02f, 4.03868010e-02f, 3.97463905e-02f, + 3.87624502e-02f, 3.74442613e-02f, 3.58040217e-02f, 3.38566274e-02f, + 3.16197104e-02f, 2.91132913e-02f, 2.63597535e-02f, 2.33834951e-02f, + 2.02109048e-02f, 1.68699197e-02f, 1.33899369e-02f, 9.80149436e-03f, + 6.13596978e-03f, 2.42540672e-03f, -1.29791566e-03f, -5.00159520e-03f, + -8.65350380e-03f, -1.22220366e-02f, -1.56763640e-02f, -1.89867381e-02f, + -2.21247040e-02f, -2.50633577e-02f, -2.77776392e-02f, -3.02443926e-02f, + -3.24427741e-02f, -3.43542347e-02f, -3.59627985e-02f, -3.72551425e-02f, + -3.82207294e-02f, -3.88518854e-02f, -3.91438407e-02f, -3.90947976e-02f, + -3.87059356e-02f, -3.79813919e-02f, -3.69281514e-02f, -3.55561727e-02f, + -3.38780082e-02f, -3.19089538e-02f, -2.96667755e-02f, -2.71715529e-02f, + -2.44455713e-02f, -2.15130067e-02f, -1.83998712e-02f, -1.51336016e-02f, + -1.17429607e-02f, -8.25773631e-03f, -4.70843717e-03f, -1.12611141e-03f, + 2.45802887e-03f, 6.01275162e-03f, 9.50720826e-03f, 1.29111118e-02f, + 1.61950221e-02f, 1.93306375e-02f, 2.22909758e-02f, 2.50506401e-02f, + 2.75860615e-02f, 2.98756376e-02f, 3.18999914e-02f, 3.36420581e-02f, + 3.50872846e-02f, 3.62237568e-02f, 3.70422138e-02f, 3.75362558e-02f, + 3.77022507e-02f, 3.75395252e-02f, 3.70501413e-02f, 3.62391403e-02f, + 3.51142523e-02f, 3.36859539e-02f, 3.19673834e-02f, 2.99741015e-02f, + 2.77241155e-02f, 2.52375586e-02f, 2.25366390e-02f, 1.96453479e-02f, + 1.65892764e-02f, 1.33954509e-02f, 1.00919807e-02f, 6.70792095e-03f, + 3.27291818e-03f, -1.82973294e-04f, -3.62955472e-03f, -7.03682264e-03f, + -1.03751742e-02f, -1.36156254e-02f, -1.67301419e-02f, -1.96918703e-02f, + -2.24752801e-02f, -2.50565117e-02f, -2.74134928e-02f, -2.95261426e-02f, + -3.13765953e-02f, -3.29492690e-02f, -3.42310321e-02f, -3.52113800e-02f, + -3.58823726e-02f, -3.62388683e-02f, -3.62784198e-02f, -3.60013804e-02f, + -3.54108451e-02f, -3.45126668e-02f, -3.33153418e-02f, -3.18299584e-02f, + -3.00701260e-02f, -2.80517892e-02f, -2.57931374e-02f, -2.33143863e-02f, + -2.06376424e-02f, -1.77867508e-02f, -1.47868963e-02f, -1.16646556e-02f, + -8.44750940e-03f, -5.16378838e-03f, -1.84226820e-03f, 1.48794674e-03f, + 4.79778745e-03f, 8.05836223e-03f, 1.12413416e-02f, 1.43190753e-02f, + 1.72649338e-02f, 2.00534760e-02f, 2.26606759e-02f, 2.50641770e-02f, + 2.72434093e-02f, 2.91798405e-02f, 3.08570869e-02f, 3.22610538e-02f, + 3.33800775e-02f, 3.42050023e-02f, 3.47292410e-02f, 3.49489094e-02f, + 3.48627120e-02f, 3.44720896e-02f, 3.37811019e-02f, 3.27964643e-02f, + 3.15273982e-02f, 2.99856201e-02f, 2.81852138e-02f, 2.61424498e-02f, + 2.38757347e-02f, 2.14053475e-02f, 1.87533476e-02f, 1.59433058e-02f, + 1.30001119e-02f, 9.94981546e-03f, 6.81929403e-03f, 3.63610142e-03f, + 4.28194737e-04f, -2.77634627e-03f, -5.94948890e-03f, -9.06356635e-03f, + -1.20914729e-02f, -1.50068986e-02f, -1.77846186e-02f, -2.04006305e-02f, + -2.28323995e-02f, -2.50590554e-02f, -2.70615857e-02f, -2.88229378e-02f, + -3.03282395e-02f, -3.15648981e-02f, -3.25226545e-02f, -3.31937480e-02f, + -3.35729235e-02f, -3.36575141e-02f, -3.34474213e-02f, -3.29451007e-02f, + -3.21556137e-02f, -3.10864769e-02f, -2.97476700e-02f, -2.81514985e-02f, + -2.63124688e-02f, -2.42472323e-02f, -2.19743519e-02f, -1.95141654e-02f, + -1.68886307e-02f, -1.41210735e-02f, -1.12360633e-02f, -8.25907766e-03f, + -5.21640280e-03f, -2.13480364e-03f, 9.58636625e-04f, 4.03679668e-03f, + 7.07279449e-03f, 1.00401133e-02f, 1.29129091e-02f, 1.56662400e-02f, + 1.82762701e-02f, 2.07204296e-02f, 2.29776718e-02f, 2.50286615e-02f, + 2.68558574e-02f, 2.84437511e-02f, 2.97789600e-02f, 3.08503332e-02f, + 3.16490674e-02f, 3.21687669e-02f, 3.24054635e-02f, 3.23577221e-02f, + 3.20265687e-02f, 3.14155519e-02f, 3.05305894e-02f, 2.93800783e-02f, + 2.79746552e-02f, 2.63272236e-02f, 2.44527049e-02f, 2.23680618e-02f, + 2.00919975e-02f, 1.76449192e-02f, 1.50485988e-02f, 1.23261499e-02f, + 9.50171139e-03f, 6.60026650e-03f, 3.64740367e-03f, 6.69130719e-04f, + -2.30836384e-03f, -5.25901398e-03f, -8.15698453e-03f, -1.09769803e-02f, + -1.36944604e-02f, -1.62858144e-02f, -1.87285884e-02f, -2.10016919e-02f, + -2.30855512e-02f, -2.49623180e-02f, -2.66159983e-02f, -2.80325244e-02f, + -2.92000656e-02f, -3.01088544e-02f, -3.07515454e-02f, -3.11230425e-02f, + -3.12207134e-02f, -3.10442642e-02f, -3.05958739e-02f, -2.98800667e-02f, + -2.89037056e-02f, -2.76759017e-02f, -2.62080378e-02f, -2.45134730e-02f, + -2.26075902e-02f, -2.05075661e-02f, -1.82322785e-02f, -1.58020520e-02f, + -1.32385765e-02f, -1.05646147e-02f, -7.80391393e-03f, -4.98087115e-03f, + -2.12039991e-03f, 7.52293928e-04f, 3.61198449e-03f, 6.43358111e-03f, + 9.19241842e-03f, 1.18644039e-02f, 1.44262640e-02f, 1.68557443e-02f, + 1.91318358e-02f, 2.12348654e-02f, 2.31467521e-02f, 2.48511451e-02f, + 2.63335090e-02f, 2.75813428e-02f, 2.85841744e-02f, 2.93337504e-02f, + 2.98240644e-02f, 3.00513466e-02f, 3.00142022e-02f, 2.97135260e-02f, + 2.91525594e-02f, 2.83367887e-02f, 2.72739123e-02f, 2.59738760e-02f, + 2.44485621e-02f, 2.27119106e-02f, 2.07795919e-02f, 1.86690808e-02f, + 1.63992592e-02f, 1.39904260e-02f, 1.14640690e-02f, 8.84264758e-03f, + 6.14939507e-03f, 3.40812526e-03f, 6.43054198e-04f, -2.12146966e-03f, + -4.86117838e-03f, -7.55201827e-03f, -1.01704721e-02f, -1.26936743e-02f, + -1.50996598e-02f, -1.73675327e-02f, -1.94776873e-02f, -2.14119119e-02f, + -2.31535849e-02f, -2.46878274e-02f, -2.60016123e-02f, -2.70838807e-02f, + -2.79256152e-02f, -2.85199737e-02f, -2.88622578e-02f, -2.89500170e-02f, + -2.87830391e-02f, -2.83633782e-02f, -2.76952574e-02f, -2.67851241e-02f, + -2.56414895e-02f, -2.42749591e-02f, -2.26980211e-02f, -2.09250117e-02f, + -1.89719767e-02f, -1.68564622e-02f, -1.45974790e-02f, -1.22151551e-02f, + -9.73077489e-03f, -7.16636971e-03f, -4.54471089e-03f, -1.88895556e-03f, + 7.77421152e-04f, 3.43097465e-03f, 6.04836823e-03f, 8.60665740e-03f, + 1.10834931e-02f, 1.34572307e-02f, 1.57072091e-02f, 1.78139437e-02f, + 1.97591848e-02f, 2.15261896e-02f, 2.30998051e-02f, 2.44666019e-02f, + 2.56150329e-02f, 2.65354493e-02f, 2.72202868e-02f, 2.76640272e-02f, + 2.78632920e-02f, 2.78168878e-02f, 2.75257711e-02f, 2.69930474e-02f, + 2.62239398e-02f, 2.52257420e-02f, 2.40077502e-02f, 2.25811821e-02f, + 2.09590651e-02f, 1.91560968e-02f, 1.71885831e-02f, 1.50741718e-02f, + 1.28318640e-02f, 1.04816157e-02f, 8.04442313e-03f, 5.54190051e-03f, + 2.99625439e-03f, 4.29964517e-04f, -2.13427934e-03f, -4.67394770e-03f, + -7.16668999e-03f, -9.59070046e-03f, -1.19247527e-02f, -1.41485167e-02f, + -1.62426221e-02f, -1.81889386e-02f, -1.99706517e-02f, -2.15724419e-02f, + -2.29805917e-02f, -2.41831321e-02f, -2.51699460e-02f, -2.59328014e-02f, + -2.64654988e-02f, -2.67638473e-02f, -2.68257457e-02f, -2.66511933e-02f, + -2.62422396e-02f, -2.56030378e-02f, -2.47397026e-02f, -2.36603803e-02f, + -2.23750178e-02f, -2.08954572e-02f, -1.92351291e-02f, -1.74091057e-02f, + -1.54338252e-02f, -1.33270371e-02f, -1.11076012e-02f, -8.79532116e-03f, + -6.41081337e-03f, -3.97522070e-03f, -1.51016205e-03f, 9.62627810e-04f, + 3.42126524e-03f, 5.84416900e-03f, 8.21003607e-03f, 1.04981418e-02f, + 1.26884979e-02f, 1.47620168e-02f, 1.67006743e-02f, 1.84877071e-02f, + 2.01076631e-02f, 2.15466723e-02f, 2.27924559e-02f, 2.38344391e-02f, + 2.46639202e-02f, 2.52740508e-02f, 2.56599603e-02f, 2.58187383e-02f, + 2.57495061e-02f, 2.54533889e-02f, 2.49335063e-02f, 2.41949679e-02f, + 2.32447443e-02f, 2.20917330e-02f, 2.07465369e-02f, 1.92214548e-02f, + 1.75303581e-02f, 1.56885248e-02f, 1.37125582e-02f, 1.16201731e-02f, + 9.43010247e-03f, 7.16186261e-03f, 4.83567361e-03f, 2.47215188e-03f, + 9.22473038e-05f, -2.28300123e-03f, -4.63266587e-03f, -6.93607706e-03f, + -9.17298978e-03f, -1.13238544e-02f, -1.33698760e-02f, -1.52932430e-02f, + -1.70772680e-02f, -1.87065128e-02f, -2.01669821e-02f, -2.14461452e-02f, + -2.25331284e-02f, -2.34188021e-02f, -2.40957864e-02f, -2.45585844e-02f, + -2.48036252e-02f, -2.48292044e-02f, -2.46356329e-02f, -2.42250842e-02f, + -2.36017013e-02f, -2.27714652e-02f, -2.17421665e-02f, -2.05233690e-02f, + -1.91262271e-02f, -1.75635217e-02f, -1.58493869e-02f, -1.39993165e-02f, + -1.20299498e-02f, -9.95894696e-03f, -7.80483551e-03f, -5.58678574e-03f, + -3.32457334e-03f, -1.03821621e-03f, 1.25199524e-03f, 3.52587224e-03f, + 5.76334794e-03f, 7.94474634e-03f, 1.00509704e-02f, 1.20635647e-02f, + 1.39649989e-02f, 1.57386972e-02f, 1.73693364e-02f, 1.88428192e-02f, + 2.01465043e-02f, 2.12692517e-02f, 2.22015935e-02f, 2.29357192e-02f, + 2.34655795e-02f, 2.37870006e-02f, 2.38975984e-02f, 2.37969007e-02f, + 2.34862414e-02f, 2.29689158e-02f, 2.22499000e-02f, 2.13360637e-02f, + 2.02358982e-02f, 1.89595527e-02f, 1.75187187e-02f, 1.59264857e-02f, + 1.41973055e-02f, 1.23467171e-02f, 1.03913879e-02f, 8.34881663e-03f, + 6.23727188e-03f, 4.07554898e-03f, 1.88285221e-03f, -3.21348688e-04f, + -2.51757106e-03f, -4.68641464e-03f, -6.80879709e-03f, -8.86604146e-03f, + -1.08401587e-02f, -1.27138656e-02f, -1.44708646e-02f, -1.60958743e-02f, + -1.75748613e-02f, -1.88950773e-02f, -2.00452523e-02f, -2.10155784e-02f, + -2.17979173e-02f, -2.23857954e-02f, -2.27744512e-02f, -2.29609363e-02f, + -2.29440496e-02f, -2.27244286e-02f, -2.23044963e-02f, -2.16883864e-02f, + -2.08820436e-02f, -1.98930467e-02f, -1.87304962e-02f, -1.74051536e-02f, + -1.59290505e-02f, -1.43156476e-02f, -1.25794710e-02f, -1.07361870e-02f, + -8.80234289e-03f, -6.79523707e-03f, -4.73276287e-03f, -2.63333832e-03f, + -5.15560833e-04f, 1.60177115e-03f, 3.69994169e-03f, 5.76046713e-03f, + 7.76518011e-03f, 9.69651950e-03f, 1.15375588e-02f, 1.32722403e-02f, + 1.48854641e-02f, 1.63632477e-02f, 1.76928345e-02f, 1.88628539e-02f, + 1.98632836e-02f, 2.06857078e-02f, 2.13232370e-02f, 2.17707035e-02f, + 2.20245710e-02f, 2.20830689e-02f, 2.19461035e-02f, 2.16153999e-02f, + 2.10942875e-02f, 2.03878531e-02f, 1.95027602e-02f, 1.84472879e-02f, + 1.72311466e-02f, 1.58654896e-02f, 1.43627402e-02f, 1.27365006e-02f, + 1.10014956e-02f, 9.17326248e-03f, 7.26826777e-03f, 5.30349659e-03f, + 3.29647574e-03f, 1.26509823e-03f, -7.72666021e-04f, -2.79870526e-03f, + -4.79517508e-03f, -6.74446397e-03f, -8.62941284e-03f, -1.04335350e-02f, + -1.21410266e-02f, -1.37370298e-02f, -1.52076630e-02f, -1.65402345e-02f, + -1.77232647e-02f, -1.87466345e-02f, -1.96016877e-02f, -2.02812328e-02f, + -2.07796995e-02f, -2.10930662e-02f, -2.12190342e-02f, -2.11569310e-02f, + -2.09077424e-02f, -2.04741102e-02f, -1.98603315e-02f, -1.90722574e-02f, + -1.81172824e-02f, -1.70042570e-02f, -1.57433882e-02f, -1.43462276e-02f, + -1.28254403e-02f, -1.11947772e-02f, -9.46895912e-03f, -7.66347070e-03f, + -5.79450864e-03f, -3.87873939e-03f, -1.93323810e-03f, 2.46644329e-05f, + 1.97765804e-03f, 3.90841509e-03f, 5.79993335e-03f, 7.63553849e-03f, + 9.39912349e-03f, 1.10752347e-02f, 1.26492655e-02f, 1.41074757e-02f, + 1.54373004e-02f, 1.66272192e-02f, 1.76670438e-02f, 1.85479358e-02f, + 1.92624646e-02f, 1.98047255e-02f, 2.01703008e-02f, 2.03564026e-02f, + 2.03618038e-02f, 2.01868907e-02f, 1.98336400e-02f, 1.93056297e-02f, + 1.86079226e-02f, 1.77471409e-02f, 1.67312987e-02f, 1.55697372e-02f, + 1.42731251e-02f, 1.28532513e-02f, 1.13230121e-02f, 9.69619751e-03f, + 7.98747524e-03f, 6.21217610e-03f, 4.38617553e-03f, 2.52576378e-03f, + 6.47513831e-04f, -1.23187933e-03f, -3.09578918e-03f, -4.92771934e-03f, + -6.71155785e-03f, -8.43156989e-03f, -1.00726980e-02f, -1.16206095e-02f, + -1.30617878e-02f, -1.43837508e-02f, -1.55750228e-02f, -1.66254535e-02f, + -1.75260165e-02f, -1.82691095e-02f, -1.88485262e-02f, -1.92595629e-02f, + -1.94989485e-02f, -1.95649969e-02f, -1.94575478e-02f, -1.91779692e-02f, + -1.87291588e-02f, -1.81155240e-02f, -1.73428622e-02f, -1.64184497e-02f, + -1.53508419e-02f, -1.41498176e-02f, -1.28263924e-02f, -1.13925480e-02f, + -9.86129571e-03f, -8.24642962e-03f, -6.56245985e-03f, -4.82449803e-03f, + -3.04804665e-03f, -1.24899186e-03f, 5.56712448e-04f, 2.35302268e-03f, + 4.12404102e-03f, 5.85413883e-03f, 7.52808495e-03f, 9.13118114e-03f, + 1.06493773e-02f, 1.20694285e-02f, 1.33790131e-02f, 1.45667599e-02f, + 1.56224667e-02f, 1.65370727e-02f, 1.73028687e-02f, 1.79133659e-02f, + 1.83636049e-02f, 1.86499152e-02f, 1.87702262e-02f, 1.87238401e-02f, + 1.85116123e-02f, 1.81358025e-02f, 1.76001712e-02f, 1.69098379e-02f, + 1.60713269e-02f, 1.50924404e-02f, 1.39821625e-02f, 1.27507290e-02f, + 1.14093145e-02f, 9.97008458e-03f, 8.44606386e-03f, 6.85095093e-03f, + 5.19909294e-03f, 3.50524621e-03f, 1.78455190e-03f, 5.23496112e-05f, + -1.67599378e-03f, -3.38516088e-03f, -5.06003030e-03f, -6.68585576e-03f, + -8.24832082e-03f, -9.73374187e-03f, -1.11291228e-02f, -1.24223220e-02f, + -1.36021312e-02f, -1.46583598e-02f, -1.55819659e-02f, -1.63650578e-02f, + -1.70010772e-02f, -1.74847152e-02f, -1.78120952e-02f, -1.79806821e-02f, + -1.79893879e-02f, -1.78385292e-02f, -1.75298522e-02f, -1.70664857e-02f, + -1.64529222e-02f, -1.56949858e-02f, -1.47997517e-02f, -1.37755159e-02f, + -1.26316843e-02f, -1.13787184e-02f, -1.00279612e-02f, -8.59169598e-03f, + -7.08284107e-03f, -5.51497784e-03f, -3.90215899e-03f, -2.25882049e-03f, + -5.99578638e-04f, 1.06075048e-03f, 2.70749024e-03f, 4.32601367e-03f, + 5.90209087e-03f, 7.42179142e-03f, 8.87180147e-03f, 1.02394295e-02f, + 1.15127513e-02f, 1.26806976e-02f, 1.37331768e-02f, 1.46611542e-02f, + 1.54567137e-02f, 1.61130908e-02f, 1.66248644e-02f, 1.69878247e-02f, + 1.71991520e-02f, 1.72573319e-02f, 1.71622504e-02f, 1.69151533e-02f, + 1.65185918e-02f, 1.59764761e-02f, 1.52940069e-02f, 1.44775476e-02f, + 1.35347439e-02f, 1.24742225e-02f, 1.13057588e-02f, 1.00399437e-02f, + 8.68828286e-03f, 7.26299632e-03f, 5.77689293e-03f, 4.24335301e-03f, + 2.67608005e-03f, 1.08909445e-03f, -5.03504096e-04f, -2.08753398e-03f, + -3.64897310e-03f, -5.17400648e-03f, -6.64921573e-03f, -8.06161447e-03f, + -9.39882273e-03f, -1.06491934e-02f, -1.18018231e-02f, -1.28467447e-02f, + -1.37749479e-02f, -1.45785068e-02f, -1.52505941e-02f, -1.57855954e-02f, + -1.61790941e-02f, -1.64279942e-02f, -1.65304126e-02f, -1.64858700e-02f, + -1.62950933e-02f, -1.59601657e-02f, -1.54844596e-02f, -1.48725186e-02f, + -1.41301516e-02f, -1.32642739e-02f, -1.22829116e-02f, -1.11950413e-02f, + -1.00106329e-02f, -8.74042472e-03f, -7.39593243e-03f, -5.98926755e-03f, + -4.53309924e-03f, -3.04046635e-03f, -1.52472960e-03f, 6.00928259e-07f, + 1.52194755e-03f, 3.02583848e-03f, 4.49892816e-03f, 5.92824223e-03f, + 7.30119202e-03f, 8.60573140e-03f, 9.83048696e-03f, 1.09647391e-02f, + 1.19986831e-02f, 1.29234016e-02f, 1.37309351e-02f, 1.44144670e-02f, + 1.49682002e-02f, 1.53875953e-02f, 1.56692643e-02f, 1.58110475e-02f, + 1.58120917e-02f, 1.56726915e-02f, 1.53945244e-02f, 1.49803712e-02f, + 1.44342905e-02f, 1.37614814e-02f, 1.29682165e-02f, 1.20618964e-02f, + 1.10508386e-02f, 9.94431276e-03f, 8.75238815e-03f, 7.48587143e-03f, + 6.15624020e-03f, 4.77541534e-03f, 3.35583886e-03f, 1.91020436e-03f, + 4.51421254e-04f, -1.00751978e-03f, -2.45365701e-03f, -3.87418456e-03f, + -5.25654068e-03f, -6.58854736e-03f, -7.85852969e-03f, -9.05533440e-03f, + -1.01685578e-02f, -1.11885037e-02f, -1.21063745e-02f, -1.29142921e-02f, + -1.36053355e-02f, -1.41737244e-02f, -1.46146963e-02f, -1.49246914e-02f, + -1.51012942e-02f, -1.51432786e-02f, -1.50506566e-02f, -1.48245834e-02f, + -1.44674302e-02f, -1.39827154e-02f, -1.33750864e-02f, -1.26502768e-02f, + -1.18150098e-02f, -1.08770275e-02f, -9.84492957e-03f, -8.72812658e-03f, + -7.53678810e-03f, -6.28165584e-03f, -4.97410178e-03f, -3.62585109e-03f, + -2.24899664e-03f, -8.55861568e-04f, 5.41158727e-04f, 1.92960471e-03f, + 3.29720069e-03f, 4.63182847e-03f, 5.92171512e-03f, 7.15552772e-03f, + 8.32245104e-03f, 9.41229766e-03f, 1.04155873e-02f, 1.13236403e-02f, + 1.21286239e-02f, 1.28237067e-02f, 1.34029530e-02f, 1.38615561e-02f, + 1.41957640e-02f, 1.44029303e-02f, 1.44815754e-02f, 1.44313144e-02f, + 1.42529830e-02f, 1.39484805e-02f, 1.35208513e-02f, 1.29742567e-02f, + 1.23138195e-02f, 1.15457887e-02f, 1.06772196e-02f, 9.71614290e-03f, + 8.67133403e-03f, 7.55228769e-03f, 6.36919353e-03f, 5.13268639e-03f, + 3.85394864e-03f, 2.54443240e-03f, 1.21585789e-03f, -1.19878996e-04f, + -1.45093919e-03f, -2.76547718e-03f, -4.05185149e-03f, -5.29871877e-03f, + -6.49507635e-03f, -7.63046174e-03f, -8.69492807e-03f, -9.67921631e-03f, + -1.05747852e-02f, -1.13739326e-02f, -1.20697971e-02f, -1.26564969e-02f, + -1.31290964e-02f, -1.34837229e-02f, -1.37175190e-02f, -1.38287732e-02f, + -1.38167986e-02f, -1.36820574e-02f, -1.34260714e-02f, -1.30514744e-02f, + -1.25618820e-02f, -1.19619814e-02f, -1.12574303e-02f, -1.04547257e-02f, + -9.56133206e-03f, -8.58538654e-03f, -7.53583412e-03f, -6.42217872e-03f, + -5.25452181e-03f, -4.04336901e-03f, -2.79962633e-03f, -1.53443002e-03f, + -2.59098789e-04f, 1.01502741e-03f, 2.27659752e-03f, 3.51443317e-03f, + 4.71761329e-03f, 5.87551504e-03f, 6.97798012e-03f, 8.01534309e-03f, + 8.97859709e-03f, 9.85934513e-03f, 1.06500123e-02f, 1.13437857e-02f, + 1.19348028e-02f, 1.24180671e-02f, 1.27895845e-02f, 1.30463879e-02f, + 1.31864572e-02f, 1.32089360e-02f, 1.31138884e-02f, 1.29025483e-02f, + 1.25770694e-02f, 1.21406815e-02f, 1.15975855e-02f, 1.09528847e-02f, + 1.02125997e-02f, 9.38359994e-03f, 8.47347906e-03f, 7.49058151e-03f, + 6.44381432e-03f, 5.34271678e-03f, 4.19719189e-03f, 3.01755365e-03f, + 1.81439519e-03f, 5.98487206e-04f, -6.19328778e-04f, -1.82821924e-03f, + -3.01745871e-03f, -4.17650106e-03f, -5.29517520e-03f, -6.36359283e-03f, + -7.37244199e-03f, -8.31286411e-03f, -9.17674098e-03f, -9.95657112e-03f, + -1.06456657e-02f, -1.12381503e-02f, -1.17290432e-02f, -1.21142223e-02f, + -1.23906200e-02f, -1.25560393e-02f, -1.26093357e-02f, -1.25503481e-02f, + -1.23799279e-02f, -1.20999009e-02f, -1.17130697e-02f, -1.12231760e-02f, + -1.06348586e-02f, -9.95364282e-03f, -9.18584158e-03f, -8.33854107e-03f, + -7.41947999e-03f, -6.43706907e-03f, -5.40019213e-03f, -4.31826103e-03f, + -3.20099965e-03f, -2.05845707e-03f, -9.00865349e-04f, 2.61441292e-04f, + 1.41809108e-03f, 2.55883321e-03f, 3.67354889e-03f, 4.75241753e-03f, + 5.78592427e-03f, 6.76501988e-03f, 7.68115315e-03f, 8.52633033e-03f, + 9.29324902e-03f, 9.97532856e-03f, 1.05667189e-02f, 1.10624375e-02f, + 1.14583325e-02f, 1.17511845e-02f, 1.19386891e-02f, 1.20194307e-02f, + 1.19930645e-02f, 1.18600946e-02f, 1.16220073e-02f, 1.12812470e-02f, + 1.08411159e-02f, 1.03058419e-02f, 9.68042693e-03f, 8.97072807e-03f, + 8.18325916e-03f, 7.32531818e-03f, 6.40466057e-03f, 5.42973409e-03f, + 4.40930059e-03f, 3.35261692e-03f, 2.26916087e-03f, 1.16867964e-03f, + 6.09764122e-05f, -1.04405158e-03f, -2.13657269e-03f, -3.20691908e-03f, + -4.24563108e-03f, -5.24355860e-03f, -6.19193381e-03f, -7.08246398e-03f, + -7.90741664e-03f, -8.65959818e-03f, -9.33257195e-03f, -9.92055171e-03f, + -1.04185689e-02f, -1.08224536e-02f, -1.11288669e-02f, -1.13354045e-02f, + -1.14404744e-02f, -1.14434825e-02f, -1.13446735e-02f, -1.11452105e-02f, + -1.08472074e-02f, -1.04535649e-02f, -9.96807850e-03f, -9.39533832e-03f, + -8.74069245e-03f, -8.01020524e-03f, -7.21061702e-03f, -6.34920826e-03f, + -5.43385500e-03f, -4.47285238e-03f, -3.47490761e-03f, -2.44893717e-03f, + -1.40424120e-03f, -3.50117524e-04f, 7.03996367e-04f, 1.74874948e-03f, + 2.77486316e-03f, 3.77323529e-03f, 4.73510696e-03f, 5.65199516e-03f, + 6.51589535e-03f, 7.31925060e-03f, 8.05510111e-03f, 8.71711178e-03f, + 9.29960810e-03f, 9.79762661e-03f, 1.02069851e-02f, 1.05243267e-02f, + 1.07470734e-02f, 1.08735440e-02f, 1.09028797e-02f, 1.08351360e-02f, + 1.06711793e-02f, 1.04127447e-02f, 1.00624520e-02f, 9.62365700e-03f, + 9.10054672e-03f, 8.49802459e-03f, 7.82168998e-03f, 7.07776632e-03f, + 6.27310545e-03f, 5.41501721e-03f, 4.51131894e-03f, 3.57017926e-03f, + 2.60009355e-03f, 1.60979968e-03f, 6.08111937e-04f, -3.95951416e-04f, + -1.39349410e-03f, -2.37563261e-03f, -3.33368651e-03f, -4.25918973e-03f, + -5.14402447e-03f, -5.98039909e-03f, -6.76106610e-03f, -7.47919350e-03f, + -8.12860686e-03f, -8.70374621e-03f, -9.19968280e-03f, -9.61226566e-03f, + -9.93805155e-03f, -1.01744272e-02f, -1.03195556e-02f, -1.03723935e-02f, + -1.03327824e-02f, -1.02013418e-02f, -9.97951235e-03f, -9.66955161e-03f, + -9.27446962e-03f, -8.79806255e-03f, -8.24481164e-03f, -7.61986353e-03f, + -6.92898907e-03f, -6.17857782e-03f, -5.37544863e-03f, -4.52693679e-03f, + -3.64070939e-03f, -2.72478903e-03f, -1.78741480e-03f, -8.36980429e-04f, + 1.17989664e-04f, 1.06900538e-03f, 2.00758934e-03f, 2.92546046e-03f, + 3.81446851e-03f, 4.66681294e-03f, 5.47503707e-03f, 6.23202642e-03f, + 6.93126676e-03f, 7.56665434e-03f, 8.13275794e-03f, 8.62476397e-03f, + 9.03846441e-03f, 9.37048808e-03f, 9.61806678e-03f, 9.77929762e-03f, + 9.85300343e-03f, 9.83878137e-03f, 9.73705126e-03f, 9.54895686e-03f, + 9.27646789e-03f, 8.92224731e-03f, 8.48973525e-03f, 7.98296668e-03f, + 7.40673818e-03f, 6.76635688e-03f, 6.06774523e-03f, 5.31727151e-03f, + 4.52181520e-03f, 3.68856414e-03f, 2.82508906e-03f, 1.93911771e-03f, + 1.03864165e-03f, 1.31724000e-04f, -7.73548104e-04f, -1.66912498e-03f, + -2.54705639e-03f, -3.39960239e-03f, -4.21921926e-03f, -4.99874677e-03f, + -5.73135156e-03f, -6.41064787e-03f, -7.03078893e-03f, -7.58638515e-03f, + -8.07274239e-03f, -8.48573382e-03f, -8.82189842e-03f, -9.07847965e-03f, + -9.25348106e-03f, -9.34553774e-03f, -9.35415328e-03f, -9.27944192e-03f, + -9.12241341e-03f, -8.88466411e-03f, -8.56856089e-03f, -8.17721225e-03f, + -7.71429404e-03f, -7.18416104e-03f, -6.59175983e-03f, -5.94253368e-03f, + -5.24247041e-03f, -4.49794039e-03f, -3.71571847e-03f, -2.90290602e-03f, + -2.06680152e-03f, -1.21494821e-03f, -3.54960536e-04f, 5.05456753e-04f, + 1.35866818e-03f, 2.19707251e-03f, 3.01328571e-03f, 3.80007591e-03f, + 4.55055509e-03f, 5.25814438e-03f, 5.91669192e-03f, 6.52047200e-03f, + 7.06430640e-03f, 7.54353794e-03f, 7.95408283e-03f, 8.29252663e-03f, + 8.55606304e-03f, 8.74262824e-03f, 8.85075236e-03f, 8.87975906e-03f, + 8.82962202e-03f, 8.70105451e-03f, 8.49545293e-03f, 8.21486139e-03f, + 7.86207328e-03f, 7.44038974e-03f, 6.95385180e-03f, 6.40695971e-03f, + 5.80479502e-03f, 5.15286870e-03f, 4.45718246e-03f, 3.72404945e-03f, + 2.96010221e-03f, 2.17226938e-03f, 1.36762733e-03f, 5.53405381e-04f, + -2.63146484e-04f, -1.07470419e-03f, -1.87409443e-03f, -2.65421924e-03f, + -3.40822243e-03f, -4.12944508e-03f, -4.81156866e-03f, -5.44867726e-03f, + -6.03520323e-03f, -6.56613683e-03f, -7.03688002e-03f, -7.44347988e-03f, + -7.78249135e-03f, -8.05112205e-03f, -8.24721385e-03f, -8.36925002e-03f, + -8.41640683e-03f, -8.38846392e-03f, -8.28595912e-03f, -8.11001020e-03f, + -7.86244307e-03f, -7.54569095e-03f, -7.16278595e-03f, -6.71738300e-03f, + -6.21361469e-03f, -5.65619404e-03f, -5.05022152e-03f, -4.40127236e-03f, + -3.71526815e-03f, -2.99841577e-03f, -2.25722112e-03f, -1.49836763e-03f, + -7.28642071e-04f, 4.50434477e-05f, 8.15794780e-04f, 1.57675983e-03f, + 2.32119303e-03f, 3.04253373e-03f, 3.73440374e-03f, 4.39076109e-03f, + 5.00588458e-03f, 5.57441293e-03f, 6.09144353e-03f, 6.55256260e-03f, + 6.95381103e-03f, 7.29184996e-03f, 7.56385409e-03f, 7.76763312e-03f, + 7.90157987e-03f, 7.96474929e-03f, 7.95679715e-03f, 7.87804369e-03f, + 7.72942509e-03f, 7.51247337e-03f, 7.22938137e-03f, 6.88285636e-03f, + 6.47620933e-03f, 6.01325566e-03f, 5.49830484e-03f, 4.93612206e-03f, + 4.33185515e-03f, 3.69104049e-03f, 3.01948602e-03f, 2.32330330e-03f, + 1.60874544e-03f, 8.82231714e-04f, 1.50308827e-04f, -5.80528317e-04f, + -1.30375322e-03f, -2.01296135e-03f, -2.70188199e-03f, -3.36444701e-03f, + -3.99483762e-03f, -4.58758013e-03f, -5.13746453e-03f, -5.63980390e-03f, + -6.09023428e-03f, -6.48495361e-03f, -6.82059867e-03f, -7.09440613e-03f, + -7.30414154e-03f, -7.44814383e-03f, -7.52537074e-03f, -7.53532231e-03f, + -7.47817928e-03f, -7.35462729e-03f, -7.16604653e-03f, -6.91428861e-03f, + -6.60184485e-03f, -6.23166749e-03f, -5.80727376e-03f, -5.33260451e-03f, + -4.81206874e-03f, -4.25046030e-03f, -3.65290532e-03f, -3.02486716e-03f, + -2.37201464e-03f, -1.70026266e-03f, -1.01565670e-03f, -3.24326012e-04f, + 3.67549442e-04f, 1.05380850e-03f, 1.72833677e-03f, 2.38519657e-03f, + 3.01857597e-03f, 3.62294858e-03f, 4.19299252e-03f, 4.72378606e-03f, + 5.21069555e-03f, 5.64957232e-03f, 6.03664967e-03f, 6.36867744e-03f, + 6.64284990e-03f, 6.85698418e-03f, 7.00931443e-03f, 7.09874441e-03f, + 7.12465840e-03f, 7.08706888e-03f, 6.98651094e-03f, 6.82410178e-03f, + 6.60150306e-03f, 6.32090521e-03f, 5.98500306e-03f, 5.59697420e-03f, + 5.16044998e-03f, 4.67947995e-03f, 4.15852195e-03f, 3.60234011e-03f, + 3.01599436e-03f, 2.40483676e-03f, 1.77436911e-03f, 1.13028995e-03f, + 4.78371791e-04f, -1.75557439e-04f, -8.25650621e-04f, -1.46616696e-03f, + -2.09139965e-03f, -2.69583389e-03f, -3.27419516e-03f, -3.82140068e-03f, + -4.33268241e-03f, -4.80363658e-03f, -5.23017010e-03f, -5.60867917e-03f, + -5.93592714e-03f, -6.20921825e-03f, -6.42625503e-03f, -6.58536384e-03f, + -6.68526899e-03f, -6.72533025e-03f, -6.70537034e-03f, -6.62579421e-03f, + -6.48752153e-03f, -6.29196633e-03f, -6.04110074e-03f, -5.73732501e-03f, + -5.38355191e-03f, -4.98307960e-03f, -4.53965639e-03f, -4.05738219e-03f, + -3.54068617e-03f, -2.99427320e-03f, -2.42313171e-03f, -1.83242705e-03f, + -1.22748267e-03f, -6.13742401e-04f, 3.29459964e-06f, 6.18128643e-04f, + 1.22530705e-03f, 1.81942982e-03f, 2.39525993e-03f, 2.94773242e-03f, + 3.47202200e-03f, 3.96353949e-03f, 4.41805557e-03f, 4.83162874e-03f, + 5.20072081e-03f, 5.52222100e-03f, 5.79342983e-03f, 6.01209834e-03f, + 6.17646715e-03f, 6.28528285e-03f, 6.33778155e-03f, 6.33364321e-03f, + 6.27317175e-03f, 6.15705477e-03f, 5.98657179e-03f, 5.76336894e-03f, + 5.48968624e-03f, 5.16811657e-03f, 4.80167923e-03f, 4.39381474e-03f, + 3.94828981e-03f, 3.46922951e-03f, 2.96098404e-03f, 2.42819955e-03f, + 1.87572404e-03f, 1.30851770e-03f, 7.31708692e-04f, 1.50445075e-04f, + -4.30070196e-04f, -1.00466524e-03f, -1.56827393e-03f, -2.11588940e-03f, + -2.64269440e-03f, -3.14408074e-03f, -3.61568802e-03f, -4.05340575e-03f, + -4.45347457e-03f, -4.81245326e-03f, -5.12730726e-03f, -5.39539697e-03f, + -5.61447256e-03f, -5.78280084e-03f, -5.89903878e-03f, -5.96236515e-03f, + -5.97237627e-03f, -5.92920270e-03f, -5.83340844e-03f, -5.68605666e-03f, + -5.48859720e-03f, -5.24302551e-03f, -4.95168147e-03f, -4.61731774e-03f, + -4.24306545e-03f, -3.83242787e-03f, -3.38915992e-03f, -2.91735676e-03f, + -2.42128273e-03f, -1.90549963e-03f, -1.37460030e-03f, -8.33438466e-04f, + -2.86823004e-04f, 2.60354880e-04f, 8.03207784e-04f, 1.33692447e-03f, + 1.85678689e-03f, 2.35821923e-03f, 2.83683539e-03f, 3.28844174e-03f, + 3.70911927e-03f, 4.09525832e-03f, 4.44351520e-03f, 4.75094096e-03f, + 5.01496724e-03f, 5.23338423e-03f, 5.40441842e-03f, 5.52671520e-03f, + 5.59940305e-03f, 5.62196231e-03f, 5.59441894e-03f, 5.51717260e-03f, + 5.39113480e-03f, 5.21756593e-03f, 4.99821309e-03f, 4.73517171e-03f, + 4.43098991e-03f, 4.08848316e-03f, 3.71086536e-03f, 3.30161941e-03f, + 2.86452112e-03f, 2.40355058e-03f, 1.92289472e-03f, 1.42691829e-03f, + 9.20082667e-04f, 4.06947402e-04f, -1.07889236e-04f, -6.19866009e-04f, + -1.12440714e-03f, -1.61705134e-03f, -2.09347995e-03f, -2.54950186e-03f, + -2.98112018e-03f, -3.38459298e-03f, -3.75646023e-03f, -4.09349417e-03f, + -4.39283025e-03f, -4.65196264e-03f, -4.86872185e-03f, -5.04135627e-03f, + -5.16846121e-03f, -5.24911038e-03f, -5.28273546e-03f, -5.26923483e-03f, + -5.20889346e-03f, -5.10241936e-03f, -4.95095616e-03f, -4.75600604e-03f, + -4.51946213e-03f, -4.24360018e-03f, -3.93100678e-03f, -3.58463172e-03f, + -3.20766423e-03f, -2.80356963e-03f, -2.37606413e-03f, -1.92903332e-03f, + -1.46654246e-03f, -9.92737520e-04f, -5.11899001e-04f, -2.83386680e-05f, + 4.53646722e-04f, 9.29762308e-04f, 1.39578833e-03f, 1.84762733e-03f, + 2.28131825e-03f, 2.69304631e-03f, 3.07924546e-03f, 3.43657876e-03f, + 3.76196637e-03f, 4.05264982e-03f, 4.30615625e-03f, 4.52037923e-03f, + 4.69357270e-03f, 4.82432688e-03f, 4.91167463e-03f, 4.95498330e-03f, + 4.95403020e-03f, 4.90901290e-03f, 4.82048355e-03f, 4.68941823e-03f, + 4.51712335e-03f, 4.30530103e-03f, 4.05599901e-03f, 3.77155674e-03f, + 3.45466234e-03f, 3.10824592e-03f, 2.73552763e-03f, 2.33988646e-03f, + 1.92496688e-03f, 1.49452387e-03f, 1.05244323e-03f, 6.02711670e-04f, + 1.49351638e-04f, -3.03587769e-04f, -7.52061949e-04f, -1.19211664e-03f, + -1.61985030e-03f, -2.03151752e-03f, -2.42352388e-03f, -2.79243508e-03f, + -3.13508754e-03f, -3.44849890e-03f, -3.73002846e-03f, -3.97727137e-03f, + -4.18818648e-03f, -4.36099952e-03f, -4.49435996e-03f, -4.58719167e-03f, + -4.63889710e-03f, -4.64910091e-03f, -4.61791828e-03f, -4.54579073e-03f, + -4.43349692e-03f, -4.28220742e-03f, -4.09340522e-03f, -3.86894313e-03f, + -3.61094458e-03f, -3.32182985e-03f, -3.00430811e-03f, -2.66130866e-03f, + -2.29599013e-03f, -1.91166816e-03f, -1.51187551e-03f, -1.10018574e-03f, + -6.80346354e-04f, -2.56113849e-04f, 1.68739284e-04f, 5.90407275e-04f, + 1.00515855e-03f, 1.40933774e-03f, 1.79936566e-03f, 2.17186782e-03f, + 2.52357035e-03f, 2.85142336e-03f, 3.15262986e-03f, 3.42461005e-03f, + 3.66503089e-03f, 3.87190507e-03f, 4.04353460e-03f, 4.17850434e-03f, + 4.27578294e-03f, 4.33462985e-03f, 4.35470557e-03f, 4.33597602e-03f, + 4.27874072e-03f, 4.18369422e-03f, 4.05179951e-03f, 3.88441838e-03f, + 3.68314007e-03f, 3.44992044e-03f, 3.18696299e-03f, 2.89668435e-03f, + 2.58184280e-03f, 2.24526719e-03f, 1.89009368e-03f, 1.51951951e-03f, + 1.13694082e-03f, 7.45769400e-04f, 3.49541752e-04f, -4.81936756e-05f, + -4.43913653e-04f, -8.34083461e-04f, -1.21527427e-03f, -1.58411419e-03f, + -1.93737804e-03f, -2.27200055e-03f, -2.58505953e-03f, -2.87386789e-03f, + -3.13596261e-03f, -3.36909158e-03f, -3.57133916e-03f, -3.74099847e-03f, + -3.87671687e-03f, -3.97740006e-03f, -4.04231029e-03f, -4.07103135e-03f, + -4.06340767e-03f, -4.01970877e-03f, -3.94042889e-03f, -3.82644559e-03f, + -3.67889403e-03f, -3.49922796e-03f, -3.28921214e-03f, -3.05076130e-03f, + -2.78618777e-03f, -2.49791205e-03f, -2.18859644e-03f, -1.86109553e-03f, + -1.51839073e-03f, -1.16358358e-03f, -7.99877062e-04f, -4.30553251e-04f, + -5.89097879e-05f, 3.11723769e-04f, 6.78086247e-04f, 1.03688551e-03f, + 1.38501625e-03f, 1.71939231e-03f, 2.03710542e-03f, 2.33541156e-03f, + 2.61171872e-03f, 2.86367519e-03f, 3.08912751e-03f, 3.28618123e-03f, + 3.45323225e-03f, 3.58887288e-03f, 3.69206164e-03f, 3.76199260e-03f, + 3.79818934e-03f, 3.80048902e-03f, 3.76896561e-03f, 3.70409972e-03f, + 3.60655769e-03f, 3.47737266e-03f, 3.31778682e-03f, 3.12940296e-03f, + 2.91396911e-03f, 2.67353140e-03f, 2.41032316e-03f, 2.12679252e-03f, + 1.82553429e-03f, 1.50931293e-03f, 1.18097998e-03f, 8.43534445e-04f, + 4.99989066e-04f, 1.53447611e-04f, -1.93022636e-04f, -5.36321933e-04f, + -8.73416474e-04f, -1.20133088e-03f, -1.51720912e-03f, -1.81826798e-03f, + -2.10190341e-03f, -2.36567388e-03f, -2.60729607e-03f, -2.82474796e-03f, + -3.01616460e-03f, -3.17997100e-03f, -3.31484550e-03f, -3.41966897e-03f, + -3.49367342e-03f, -3.53630851e-03f, -3.54733556e-03f, -3.52679670e-03f, + -3.47499990e-03f, -3.39254703e-03f, -3.28028198e-03f, -3.13934064e-03f, + -2.97110336e-03f, -2.77718173e-03f, -2.55939692e-03f, -2.31979112e-03f, + -2.06058943e-03f, -1.78418388e-03f, -1.49308601e-03f, -1.18996918e-03f, + -8.77562261e-04f, -5.58694884e-04f, -2.36201878e-04f, 8.69917292e-05f, + 4.08040872e-04f, 7.24100044e-04f, 1.03237391e-03f, 1.33015630e-03f, + 1.61484341e-03f, 1.88395774e-03f, 2.13520669e-03f, 2.36638885e-03f, + 2.57554947e-03f, 2.76095026e-03f, 2.92101166e-03f, 3.05442850e-03f, + 3.16014757e-03f, 3.23732893e-03f, 3.28541223e-03f, 3.30412034e-03f, + 3.29335572e-03f, 3.25342718e-03f, 3.18472643e-03f, 3.08805315e-03f, + 2.96434808e-03f, 2.81484617e-03f, 2.64098428e-03f, 2.44441964e-03f, + 2.22698580e-03f, 1.99071671e-03f, 1.73777144e-03f, 1.47049147e-03f, + 1.19131101e-03f, 9.02757052e-04f, 6.07440484e-04f, 3.08007319e-04f, + 7.13829517e-06f, -2.92474511e-04f, -5.88197665e-04f, -8.77399733e-04f, + -1.15755209e-03f, -1.42622267e-03f, -1.68101236e-03f, -1.91978505e-03f, + -2.14045006e-03f, -2.34115054e-03f, -2.52017578e-03f, -2.67602742e-03f, + -2.80743844e-03f, -2.91334720e-03f, -2.99289427e-03f, -3.04551982e-03f, + -3.07087625e-03f, -3.06883997e-03f, -3.03955162e-03f, -2.98340720e-03f, + -2.90101796e-03f, -2.79322818e-03f, -2.66108957e-03f, -2.50591158e-03f, + -2.32917402e-03f, -2.13252284e-03f, -1.91779817e-03f, -1.68700449e-03f, + -1.44223748e-03f, -1.18575491e-03f, -9.19861684e-04f, -6.47001914e-04f, + -3.69593810e-04f, -9.01276712e-05f, 1.88886030e-04f, 4.64997876e-04f, + 7.35743579e-04f, 9.98752535e-04f, 1.25173547e-03f, 1.49246727e-03f, + 1.71888893e-03f, 1.92901822e-03f, 2.12110128e-03f, 2.29349620e-03f, + 2.44475112e-03f, 2.57362114e-03f, 2.67908845e-03f, 2.76026445e-03f, + 2.81660118e-03f, 2.84766807e-03f, 2.85331403e-03f, 2.83360095e-03f, + 2.78882988e-03f, 2.71949307e-03f, 2.62633897e-03f, 2.51027194e-03f, + 2.37244667e-03f, 2.21418592e-03f, 2.03698052e-03f, 1.84248796e-03f, + 1.63251333e-03f, 1.40901166e-03f, 1.17398423e-03f, 9.29629511e-04f, + 6.78093274e-04f, 4.21697134e-04f, 1.62708629e-04f, -9.65532846e-05f, + -3.53786150e-04f, -6.06698280e-04f, -8.53097342e-04f, -1.09078811e-03f, + -1.31773933e-03f, -1.53194961e-03f, -1.73160040e-03f, -1.91496699e-03f, + -2.08051810e-03f, -2.22683099e-03f, -2.35272161e-03f, -2.45716809e-03f, + -2.53932263e-03f, -2.59857031e-03f, -2.63448385e-03f, -2.64686900e-03f, + -2.63568789e-03f, -2.60117512e-03f, -2.54374911e-03f, -2.46399878e-03f, + -2.36276068e-03f, -2.24101080e-03f, -2.09994110e-03f, -1.94088932e-03f, + -1.76533620e-03f, -1.57492545e-03f, -1.37143402e-03f, -1.15668344e-03f, + -9.32686687e-04f, -7.01423675e-04f, -4.65019034e-04f, -2.25575437e-04f, + 1.47791969e-05f, 2.53869081e-04f, 4.89608281e-04f, 7.19930839e-04f, + 9.42775487e-04f, 1.15624415e-03f, 1.35846050e-03f, 1.54767351e-03f, + 1.72231203e-03f, 1.88082576e-03f, 2.02194509e-03f, 2.14444684e-03f, + 2.24738140e-03f, 2.32988384e-03f, 2.39134751e-03f, 2.43130004e-03f, + 2.44952080e-03f, 2.44590293e-03f, 2.42061909e-03f, 2.37398935e-03f, + 2.30650850e-03f, 2.21889198e-03f, 2.11201559e-03f, 1.98687753e-03f, + 1.84474091e-03f, 1.68687111e-03f, 1.51481261e-03f, 1.33010545e-03f, + 1.13447001e-03f, 9.29723262e-04f, 7.17657881e-04f, 5.00235175e-04f, + 2.79406846e-04f, 5.71322995e-05f, -1.64594545e-04f, -3.83823629e-04f, + -5.98614360e-04f, -8.07065822e-04f, -1.00739680e-03f, -1.19784818e-03f, + -1.37675697e-03f, -1.54263099e-03f, -1.69403924e-03f, -1.82971049e-03f, + -1.94850212e-03f, -2.04945536e-03f, -2.13177374e-03f, -2.19478544e-03f, + -2.23804061e-03f, -2.26125546e-03f, -2.26431492e-03f, -2.24728584e-03f, + -2.21038704e-03f, -2.15409950e-03f, -2.07896974e-03f, -1.98576777e-03f, + -1.87541310e-03f, -1.74895112e-03f, -1.60761319e-03f, -1.45267246e-03f, + -1.28561050e-03f, -1.10794701e-03f, -9.21319188e-04f, -7.27412747e-04f, + -5.28001974e-04f, -3.24849174e-04f, -1.19822475e-04f, 8.53071910e-05f, + 2.88686843e-04f, 4.88528049e-04f, 6.83070989e-04f, 8.70634797e-04f, + 1.04957014e-03f, 1.21833395e-03f, 1.37549860e-03f, 1.51969890e-03f, + 1.64975621e-03f, 1.76454677e-03f, 1.86314685e-03f, 1.94476478e-03f, + 2.00874558e-03f, 2.05462014e-03f, 2.08206459e-03f, 2.09092884e-03f, + 2.08122572e-03f, 2.05311829e-03f, 2.00696285e-03f, 1.94325570e-03f, + 1.86261554e-03f, 1.76589405e-03f, 1.65398613e-03f, 1.52796111e-03f, + 1.38902998e-03f, 1.23845862e-03f, 1.07765357e-03f, 9.08101811e-04f, + 7.31312372e-04f, 5.48925579e-04f, 3.62559457e-04f, 1.73908753e-04f, + -1.53640653e-05f, -2.03576240e-04f, -3.89073746e-04f, -5.70178373e-04f, + -7.45367890e-04f, -9.13091163e-04f, -1.07188249e-03f, -1.22041361e-03f, + -1.35740687e-03f, -1.48168528e-03f, -1.59225154e-03f, -1.68814122e-03f, + -1.76862655e-03f, -1.83303385e-03f, -1.88089694e-03f, -1.91186980e-03f, + -1.92575160e-03f, -1.92251421e-03f, -1.90226422e-03f, -1.86526958e-03f, + -1.81193893e-03f, -1.74283351e-03f, -1.65863573e-03f, -1.56017209e-03f, + -1.44838006e-03f, -1.32431143e-03f, -1.18916080e-03f, -1.04412159e-03f, + -8.90592600e-04f, -7.29926142e-04f, -5.63607604e-04f, -3.93123732e-04f, + -2.20015398e-04f, -4.58265535e-05f, 1.27888591e-04f, 2.99622014e-04f, + 4.67812693e-04f, 6.31045212e-04f, 7.87850352e-04f, 9.36918188e-04f, + 1.07691014e-03f, 1.20669763e-03f, 1.32512406e-03f, 1.43124633e-03f, + 1.52414726e-03f, 1.60310171e-03f, 1.66746035e-03f, 1.71674068e-03f, + 1.75057975e-03f, 1.76874501e-03f, 1.77117438e-03f, 1.75790455e-03f, + 1.72916148e-03f, 1.68523050e-03f, 1.62665041e-03f, 1.55393961e-03f, + 1.46788028e-03f, 1.36921441e-03f, 1.25897234e-03f, 1.13815311e-03f, + 1.00785213e-03f, 8.69331636e-04f, 7.23787860e-04f, 5.72621147e-04f, + 4.17123806e-04f, 2.58743469e-04f, 9.88837891e-05f, -6.10350755e-05f, + -2.19596167e-04f, -3.75409622e-04f, -5.27082337e-04f, -6.73344125e-04f, + -8.12882243e-04f, -9.44509077e-04f, -1.06712919e-03f, -1.17964492e-03f, + -1.28116892e-03f, -1.37084083e-03f, -1.44791745e-03f, -1.51179651e-03f, + -1.56196842e-03f, -1.59806342e-03f, -1.61984890e-03f, -1.62719129e-03f, + -1.62009091e-03f, -1.59871731e-03f, -1.56330213e-03f, -1.51425912e-03f, + -1.45207397e-03f, -1.37735224e-03f, -1.29085967e-03f, -1.19339166e-03f, + -1.08587214e-03f, -9.69313282e-04f, -8.44784217e-04f, -7.13452738e-04f, + -5.76480508e-04f, -4.35102909e-04f, -2.90654344e-04f, -1.44369163e-04f, + 2.42120883e-06f, 1.48447430e-04f, 2.92370866e-04f, 4.32973514e-04f, + 5.68999279e-04f, 6.99308513e-04f, 8.22732435e-04f, 9.38238883e-04f, + 1.04484914e-03f, 1.14166499e-03f, 1.22788622e-03f, 1.30279910e-03f, + 1.36578274e-03f, 1.41640462e-03f, 1.45420013e-03f, 1.47896611e-03f, + 1.49053972e-03f, 1.48884571e-03f, 1.47404145e-03f, 1.44625672e-03f, + 1.40585004e-03f, 1.35323924e-03f, 1.28894075e-03f, 1.21358722e-03f, + 1.12792237e-03f, 1.03272450e-03f, 9.28938538e-04f, 8.17461092e-04f, + 6.99372886e-04f, 5.75717626e-04f, 4.47641236e-04f, 3.16292734e-04f, + 1.82841969e-04f, 4.84802779e-05f, -8.55739910e-05f, -2.18169080e-04f, + -3.48142521e-04f, -4.74327437e-04f, -5.95661172e-04f, -7.11080885e-04f, + -8.19593186e-04f, -9.20314282e-04f, -1.01233129e-03f, -1.09493574e-03f, + -1.16743147e-03f, -1.22920752e-03f, -1.27981998e-03f, -1.31882788e-03f, + -1.34600511e-03f, -1.36114508e-03f, -1.36417035e-03f, -1.35514680e-03f, + -1.33419233e-03f, -1.30158504e-03f, -1.25764422e-03f, -1.20284876e-03f, + -1.13771466e-03f, -1.06289654e-03f, -9.79088444e-04f, -8.87105266e-04f, + -7.87774055e-04f, -6.82024906e-04f, -5.70838905e-04f, -4.55202296e-04f, + -3.36181145e-04f, -2.14839486e-04f, -9.22503227e-05f, 3.04698838e-05f, + 1.52270414e-04f, 2.72050892e-04f, 3.88799677e-04f, 5.01453830e-04f, + 6.09100748e-04f, 7.10751675e-04f, 8.05583159e-04f, 8.92801542e-04f, + 9.71649359e-04f, 1.04151118e-03f, 1.10177598e-03f, 1.15200217e-03f, + 1.19178629e-03f, 1.22083114e-03f, 1.23895814e-03f, 1.24603381e-03f, + 1.24209314e-03f, 1.22718978e-03f, 1.20157123e-03f, 1.16547661e-03f, + 1.11929301e-03f, 1.06350264e-03f, 9.98630850e-04f, 9.25308342e-04f, + 8.44227193e-04f, 7.56141297e-04f, 6.61877038e-04f, 5.62284265e-04f, + 4.58306144e-04f, 3.50831771e-04f, 2.40873321e-04f, 1.29410208e-04f, + 1.74046420e-05f, -9.41372015e-05f, -2.04212769e-04f, -3.11884379e-04f, + -4.16198692e-04f, -5.16283854e-04f, -6.11247752e-04f, -7.00285651e-04f, + -7.82656708e-04f, -8.57682384e-04f, -9.24710993e-04f, -9.83216422e-04f, + -1.03273072e-03f, -1.07286281e-03f, -1.10331228e-03f, -1.12385081e-03f, + -1.13439398e-03f, -1.13485267e-03f, -1.12532108e-03f, -1.10590886e-03f, + -1.07686330e-03f, -1.03849711e-03f, -9.91189076e-04f, -9.35388727e-04f, + -8.71690018e-04f, -8.00651347e-04f, -7.22956626e-04f, -6.39322842e-04f, + -5.50528037e-04f, -4.57398663e-04f, -3.60742819e-04f, -2.61456827e-04f, + -1.60433252e-04f, -5.85672438e-05f, 4.32388885e-05f, 1.44099976e-04f, + 2.43118717e-04f, 3.39409985e-04f, 4.32194068e-04f, 5.20625265e-04f, + 6.03978397e-04f, 6.81539342e-04f, 7.52654738e-04f, 8.16724875e-04f, + 8.73252328e-04f, 9.21758980e-04f, 9.61871797e-04f, 9.93285392e-04f, + 1.01577077e-03f, 1.02918084e-03f, 1.03343231e-03f, 1.02859389e-03f, + 1.01469668e-03f, 9.91956413e-04f, 9.60609395e-04f, 9.20977714e-04f, + 8.73477570e-04f, 8.18534765e-04f, 7.56717188e-04f, 6.88582017e-04f, + 6.14781378e-04f, 5.35992969e-04f, 4.52932280e-04f, 3.66367367e-04f, + 2.77067953e-04f, 1.85846068e-04f, 9.35202666e-05f, 8.95800378e-07f, + -9.12013687e-05f, -1.81968879e-04f, -2.70612753e-04f, -3.56346876e-04f, + -4.38458579e-04f, -5.16248792e-04f, -5.89021803e-04f, -6.56215711e-04f, + -7.17226849e-04f, -7.71587683e-04f, -8.18834525e-04f, -8.58598909e-04f, + -8.90593018e-04f, -9.14550231e-04f, -9.30330737e-04f, -9.37818621e-04f, + -9.37042342e-04f, -9.28000423e-04f, -9.10856704e-04f, -8.85795548e-04f, + -8.53094084e-04f, -8.13072428e-04f, -7.66143829e-04f, -7.12744419e-04f, + -6.53375169e-04f, -5.88633731e-04f, -5.19070071e-04f, -4.45359640e-04f, + -3.68152539e-04f, -2.88173584e-04f, -2.06121828e-04f, -1.22733383e-04f, + -3.87658539e-05f, 4.50501871e-05f, 1.27995593e-04f, 2.09307286e-04f, + 2.88316517e-04f, 3.64302877e-04f, 4.36661583e-04f, 5.04755088e-04f, + 5.68007944e-04f, 6.25887844e-04f, 6.77933133e-04f, 7.23703420e-04f, + 7.62852083e-04f, 7.95064070e-04f, 8.20080681e-04f, 8.37764175e-04f, + 8.47969128e-04f, 8.50664693e-04f, 8.45873351e-04f, 8.33674258e-04f, + 8.14207332e-04f, 7.87719338e-04f, 7.54456412e-04f, 7.14767940e-04f, + 6.69041313e-04f, 6.17697028e-04f, 5.61235426e-04f, 5.00173623e-04f, + 4.35079832e-04f, 3.66567870e-04f, 2.95227094e-04f, 2.21715344e-04f, + 1.46718993e-04f, 7.08530739e-05f, -5.15577364e-06f, -8.07004736e-05f, + -1.55066524e-04f, -2.27613536e-04f, -2.97740553e-04f, -3.64841340e-04f, + -4.28317869e-04f, -4.87670380e-04f, -5.42375883e-04f, -5.92004229e-04f, + -6.36123948e-04f, -6.74394124e-04f, -7.06529242e-04f, -7.32237235e-04f, + -7.51412988e-04f, -7.63820757e-04f, -7.69492035e-04f, -7.68344591e-04f, + -7.60492235e-04f, -7.45985791e-04f, -7.25024598e-04f, -6.97830116e-04f, + -6.64676731e-04f, -6.25892548e-04f, -5.81842478e-04f, -5.32951282e-04f, + -4.79696107e-04f, -4.22525795e-04f, -3.62014271e-04f, -2.98672472e-04f, + -2.33120510e-04f, -1.65900121e-04f, -9.76362200e-05f, -2.89275243e-05f, + 3.96176674e-05f, 1.07395474e-04f, 1.73835271e-04f, 2.38325404e-04f, + 3.00347969e-04f, 3.59354345e-04f, 4.14862825e-04f, 4.66386521e-04f, + 5.13515409e-04f, 5.55829029e-04f, 5.93042831e-04f, 6.24819812e-04f, + 6.50905442e-04f, 6.71146467e-04f, 6.85375692e-04f, 6.93516598e-04f, + 6.95509528e-04f, 6.91405413e-04f, 6.81262048e-04f, 6.65220278e-04f, + 6.43420145e-04f, 6.16125905e-04f, 5.83606917e-04f, 5.46156953e-04f, + 5.04157409e-04f, 4.58002510e-04f, 4.08099631e-04f, 3.54942755e-04f, + 2.98984828e-04f, 2.40759234e-04f, 1.80768051e-04f, 1.19575974e-04f, + 5.76957438e-05f, -4.28880367e-06f, -6.58721960e-05f, -1.26493174e-04f, + -1.85639859e-04f, -2.42807383e-04f, -2.97481187e-04f, -3.49221122e-04f, + -3.97578847e-04f, -4.42159263e-04f, -4.82605142e-04f, -5.18557036e-04f, + -5.49760019e-04f, -5.75954068e-04f, -5.96944106e-04f, -6.12574988e-04f, + -6.22745551e-04f, -6.27396115e-04f, -6.26534322e-04f, -6.20176804e-04f, + -6.08460174e-04f, -5.91464522e-04f, -5.69410030e-04f, -5.42484457e-04f, + -5.10992484e-04f, -4.75225134e-04f, -4.35505918e-04f, -3.92225972e-04f, + -3.45771246e-04f, -2.96593648e-04f, -2.45116844e-04f, -1.91808621e-04f, + -1.37165970e-04f, -8.16356339e-05f, -2.57445926e-05f, 3.00322984e-05f, + 8.51783200e-05f, 1.39260137e-04f, 1.91796337e-04f, 2.42317102e-04f, + 2.90405255e-04f, 3.35659286e-04f, 3.77691701e-04f, 4.16174018e-04f, + 4.50785161e-04f, 4.81219250e-04f, 5.07259738e-04f, 5.28714262e-04f, + 5.45399813e-04f, 5.57228370e-04f, 5.64092051e-04f, 5.66000580e-04f, + 5.62944333e-04f, 5.54966288e-04f, 5.42209838e-04f, 5.24790563e-04f, + 5.02873830e-04f, 4.76708610e-04f, 4.46521001e-04f, 4.12650276e-04f, + 3.75358170e-04f, 3.35013907e-04f, 2.91997251e-04f, 2.46695035e-04f, + 1.99507857e-04f, 1.50889553e-04f, 1.01231956e-04f, 5.10047602e-05f, + 6.33587302e-07f, -4.94259002e-05f, -9.87418814e-05f, -1.46889490e-04f, + -1.93470217e-04f, -2.38065458e-04f, -2.80305060e-04f, -3.19836003e-04f, + -3.56327452e-04f, -3.89502317e-04f, -4.19041782e-04f, -4.44759447e-04f, + -4.66423158e-04f, -4.83886447e-04f, -4.97011387e-04f, -5.05730787e-04f, + -5.09963720e-04f, -5.09717728e-04f, -5.05043322e-04f, -4.95963142e-04f, + -4.82639446e-04f, -4.65152875e-04f, -4.43733866e-04f, -4.18567153e-04f, + -3.89890304e-04f, -3.57996097e-04f, -3.23170997e-04f, -2.85736681e-04f, + -2.46055002e-04f, -2.04445682e-04f, -1.61320963e-04f, -1.17042529e-04f, + -7.20188676e-05f, -2.66396241e-05f, 1.86912290e-05f, 6.36017948e-05f, + 1.07665176e-04f, 1.50514890e-04f, 1.91812013e-04f, 2.31174729e-04f, + 2.68275281e-04f, 3.02820173e-04f, 3.34517215e-04f, 3.63107193e-04f, + 3.88350390e-04f, 4.10051248e-04f, 4.28044624e-04f, 4.42214263e-04f, + 4.52417167e-04f, 4.58637799e-04f, 4.60811960e-04f, 4.58959019e-04f, + 4.53110813e-04f, 4.43353615e-04f, 4.29788076e-04f, 4.12573604e-04f, + 3.91837458e-04f, 3.67827680e-04f, 3.40742776e-04f, 3.10878990e-04f, + 2.78464465e-04f, 2.43800376e-04f, 2.07253019e-04f, 1.69099894e-04f, + 1.29702525e-04f, 8.93909104e-05f, 4.85743353e-05f, 7.55415142e-06f, + -3.32831786e-05f, -7.36072164e-05f, -1.13043176e-04f, -1.51234384e-04f, + -1.87933888e-04f, -2.22751408e-04f, -2.55424048e-04f, -2.85707115e-04f, + -3.13301151e-04f, -3.38018882e-04f, -3.59650405e-04f, -3.78009094e-04f, + -3.93005971e-04f, -4.04467563e-04f, -4.12352296e-04f, -4.16625213e-04f, + -4.17213487e-04f, -4.14188932e-04f, -4.07570766e-04f, -3.97428285e-04f, + -3.83928030e-04f, -3.67135876e-04f, -3.47267227e-04f, -3.24463119e-04f, + -2.98994961e-04f, -2.71043298e-04f, -2.40926487e-04f, -2.08843709e-04f, + -1.75152575e-04f, -1.40107049e-04f, -1.04080472e-04f, -6.73135829e-05f, + -3.01948541e-05f, 7.00871665e-06f, 4.39240599e-05f, 8.02943349e-05f, + 1.15726815e-04f, 1.49966848e-04f, 1.82710879e-04f, 2.13703334e-04f, + 2.42653106e-04f, 2.69351388e-04f, 2.93549873e-04f, 3.15102924e-04f, + 3.33768751e-04f, 3.49447907e-04f, 3.62019988e-04f, 3.71363176e-04f, + 3.77445082e-04f, 3.80209433e-04f, 3.79656986e-04f, 3.75829456e-04f, + 3.68740564e-04f, 3.58494796e-04f, 3.45203622e-04f, 3.28976671e-04f, + 3.09977680e-04f, 2.88380075e-04f, 2.64390378e-04f, 2.38244599e-04f, + 2.10143730e-04f, 1.80382945e-04f, 1.49191334e-04f, 1.16874433e-04f, + 8.36939641e-05f, 4.99545687e-05f, 1.59419682e-05f, -1.80487956e-05f, + -5.17116932e-05f, -8.47731419e-05f, -1.16937183e-04f, -1.47911960e-04f, + -1.77490349e-04f, -2.05400357e-04f, -2.31387402e-04f, -2.55252058e-04f, + -2.76804796e-04f, -2.95856747e-04f, -3.12270197e-04f, -3.25902725e-04f, + -3.36672987e-04f, -3.44466047e-04f, -3.49280604e-04f, -3.51026811e-04f, + -3.49738846e-04f, -3.45444097e-04f, -3.38175670e-04f, -3.28025304e-04f, + -3.15107780e-04f, -2.99483932e-04f, -2.81389775e-04f, -2.60907140e-04f, + -2.38309091e-04f, -2.13697965e-04f, -1.87369701e-04f, -1.59547138e-04f, + -1.30435290e-04f, -1.00336342e-04f, -6.95075165e-05f, -3.81891347e-05f, + -6.66316342e-06f, 2.48005967e-05f, 5.59093608e-05f, 8.64381970e-05f, + 1.16084478e-04f, 1.44629782e-04f, 1.71817136e-04f, 1.97430379e-04f, + 2.21249248e-04f, 2.43067483e-04f, 2.62714805e-04f, 2.80037512e-04f, + 2.94912411e-04f, 3.07154450e-04f, 3.16770812e-04f, 3.23565757e-04f, + 3.27598190e-04f, 3.28781884e-04f, 3.27137017e-04f, 3.22671504e-04f, + 3.15478482e-04f, 3.05561179e-04f, 2.93071243e-04f, 2.78072214e-04f, + 2.60752421e-04f, 2.41204026e-04f, 2.19657587e-04f, 1.96274763e-04f, + 1.71259618e-04f, 1.44829587e-04f, 1.17207736e-04f, 8.86396900e-05f, + 5.93848595e-05f, 2.96756971e-05f, -2.55974213e-07f, -3.01364040e-05f, + -5.97095986e-05f, -8.87016361e-05f, -1.16938981e-04f, -1.44121097e-04f, + -1.70042060e-04f, -1.94504049e-04f, -2.17285275e-04f, -2.38190653e-04f, + -2.57074514e-04f, -2.73769854e-04f, -2.88131929e-04f, -3.00067778e-04f, + -3.09445066e-04f, -3.16238251e-04f, -3.20350572e-04f, -3.21779258e-04f, + -3.20521292e-04f, -3.16575228e-04f, -3.09991670e-04f, -3.00802605e-04f, + -2.89147820e-04f, -2.75068336e-04f, -2.58722607e-04f, -2.40234254e-04f, + -2.19762234e-04f, -1.97484144e-04f, -1.73586378e-04f, -1.48283187e-04f, + -1.21767035e-04f, -9.42546438e-05f, -6.59849449e-05f, -3.72382910e-05f, + -8.18708029e-06f, 2.09018928e-05f, 4.97856427e-05f, 7.82043260e-05f, + 1.05945996e-04f, 1.32796055e-04f, 1.58498048e-04f, 1.82852505e-04f, + 2.05652703e-04f, 2.26725402e-04f, 2.45875363e-04f, 2.62957031e-04f, + 2.77828957e-04f, 2.90361412e-04f, 3.00450626e-04f, 3.07979930e-04f, + 3.12961709e-04f, 3.15260735e-04f, 3.14925301e-04f, 3.11915939e-04f, + 3.06269493e-04f, 2.97998031e-04f, 2.87169055e-04f, 2.73915388e-04f, + 2.58278031e-04f, 2.40399328e-04f, 2.20409753e-04f, 1.98478187e-04f, + 1.74739784e-04f, 1.49434544e-04f, 1.22685308e-04f, 9.47715675e-05f, + 6.58537103e-05f, 3.61749072e-05f, 5.97746474e-06f, -2.45162183e-05f, + -5.50707960e-05f, -8.54546076e-05f, -1.15437977e-04f, -1.44752181e-04f, + -1.73217230e-04f, -2.00586450e-04f, -2.26666528e-04f, -2.51224767e-04f, + -2.74099533e-04f, -2.95109231e-04f, -3.14079824e-04f, -3.30869553e-04f, + -3.45369337e-04f, -3.57422987e-04f, -3.66953155e-04f, -3.73911775e-04f, + -3.78220230e-04f, -3.79850587e-04f, -3.78754989e-04f, -3.74987358e-04f, + -3.68568872e-04f, -3.59511330e-04f, -3.47888205e-04f, -3.33821666e-04f, + -3.17386918e-04f, -2.98721551e-04f, -2.77916847e-04f, -2.55178573e-04f, + -2.30688519e-04f, -2.04596855e-04f, -1.77101686e-04f, -1.48416144e-04f, + -1.18791903e-04f, -8.83978597e-05f, -5.74821966e-05f, -2.62868833e-05f, + 4.92815189e-06f, 3.59504591e-05f, 6.65434569e-05f, 9.64155022e-05f, + 1.25420450e-04f, 1.53244448e-04f, 1.79726500e-04f, 2.04644719e-04f, + 2.27732573e-04f, 2.48876343e-04f, 2.67856021e-04f, 2.84480504e-04f, + 2.98654254e-04f, 3.10195638e-04f, 3.18997467e-04f, 3.24986682e-04f, + 3.28010014e-04f, 3.28075276e-04f, 3.25081644e-04f, 3.18989006e-04f, + 3.09862065e-04f, 2.97618732e-04f, 2.82358452e-04f, 2.64078432e-04f, + 2.42867446e-04f, 2.18818442e-04f, 1.92028457e-04f, 1.62575887e-04f, + 1.30632731e-04f, 9.63241083e-05f, 5.98270577e-05f, 2.13018198e-05f, + -1.90650636e-05f, -6.10476572e-05f, -1.04504009e-04f, -1.49141212e-04f, + -1.94818380e-04f, -2.41269356e-04f, -2.88284124e-04f, -3.35636339e-04f, + -3.83078353e-04f, -4.30375313e-04f, -4.77325331e-04f, -5.23684425e-04f, + -5.69213416e-04f, -6.13776473e-04f, -6.57085679e-04f, -6.98973293e-04f, + -7.39240301e-04f, -7.77721569e-04f, -8.14237506e-04f, -8.48630685e-04f, + -8.80760950e-04f, -9.10481345e-04f, -9.37672148e-04f, -9.62299433e-04f, + -9.84157343e-04f, -1.00327325e-03f, -1.01946138e-03f, -1.03289356e-03f, + -1.04338135e-03f, -1.05093085e-03f, -1.05547810e-03f, -1.05718776e-03f, + -1.05596199e-03f, -1.05199493e-03f, -1.04512596e-03f, -1.03564457e-03f, + -1.02347745e-03f, -1.00881749e-03f, -9.91651851e-04f, -9.72214477e-04f, + -9.50589764e-04f, -9.26823063e-04f, -9.01169667e-04f, -8.73693053e-04f, + -8.44651495e-04f, -8.14015623e-04f, -7.82096657e-04f, -7.48978970e-04f, + -7.14918806e-04f, -6.79915120e-04f, -6.44197160e-04f, -6.07973052e-04f, + -5.71340571e-04f, -5.34494985e-04f, -4.97625899e-04f, -4.60763150e-04f, + -4.24154408e-04f, -3.87781959e-04f, -3.51977273e-04f, -3.16708720e-04f, + -2.82209173e-04f, -2.48453876e-04f, -2.15649909e-04f, -1.83919068e-04f, + -1.53211006e-04f, -1.23682813e-04f, -9.53777996e-05f, -6.83598308e-05f, + -4.27405102e-05f, -1.84644678e-05f, 4.40560628e-06f, 2.57526124e-05f, + 4.57070844e-05f, 6.42470547e-05f, 8.12438667e-05f, 9.67784543e-05f, + 1.10883532e-04f, 1.23557473e-04f, 1.34866254e-04f, 1.44751012e-04f, + 1.53323607e-04f, 1.60602540e-04f, 1.66572422e-04f, 1.71555319e-04f, + 1.75228695e-04f, 1.77785942e-04f, 1.79287868e-04f, 1.80066421e-04f, + 1.79856554e-04f, 1.78600745e-04f, 1.76640402e-04f, 1.74149693e-04f, + 1.70998956e-04f, 1.67101361e-04f, 1.62736605e-04f, 1.57955365e-04f, + 1.52783832e-04f, 1.47235562e-04f, 1.41440247e-04f, 1.35411748e-04f, + 1.29174003e-04f, 1.22883471e-04f, 1.16507352e-04f, 1.10062224e-04f, + 1.03554135e-04f, 9.72109292e-05f, 9.09057438e-05f, 8.47069282e-05f, + 7.86275439e-05f, 7.27295443e-05f, 6.70460602e-05f, 6.14870567e-05f, + 5.62358268e-05f, 5.11680423e-05f, 4.63971100e-05f, 4.18604282e-05f, + 3.75581730e-05f, 3.34956971e-05f, 2.95613583e-05f, 2.62367667e-05f, + 2.30173784e-05f, 1.99216834e-05f, 1.73717570e-05f, 1.47187235e-05f, + 1.23944987e-05f, 1.06041654e-05f, 8.75464375e-06f, 1.94324625e-05f, }; // Minimum-phase equiripple FIR lowpass From 271badfa626e8620192a9058668b385b689d0ebc Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 13 Mar 2018 16:33:32 -0700 Subject: [PATCH 08/20] provide an overlay property to control if the overlay is visible in the secondary camera view --- interface/src/ui/overlays/Base3DOverlay.cpp | 15 ++++++++++++++- interface/src/ui/overlays/Base3DOverlay.h | 3 +++ interface/src/ui/overlays/ModelOverlay.cpp | 4 +++- interface/src/ui/overlays/Overlay.h | 2 ++ interface/src/ui/overlays/OverlaysPayload.cpp | 6 +++++- 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/interface/src/ui/overlays/Base3DOverlay.cpp b/interface/src/ui/overlays/Base3DOverlay.cpp index ff5a202910..f4efd1301d 100644 --- a/interface/src/ui/overlays/Base3DOverlay.cpp +++ b/interface/src/ui/overlays/Base3DOverlay.cpp @@ -37,7 +37,8 @@ Base3DOverlay::Base3DOverlay(const Base3DOverlay* base3DOverlay) : _ignoreRayIntersection(base3DOverlay->_ignoreRayIntersection), _drawInFront(base3DOverlay->_drawInFront), _drawHUDLayer(base3DOverlay->_drawHUDLayer), - _isGrabbable(base3DOverlay->_isGrabbable) + _isGrabbable(base3DOverlay->_isGrabbable), + _isVisibleInSecondaryCamera(base3DOverlay->_isVisibleInSecondaryCamera) { setTransform(base3DOverlay->getTransform()); } @@ -142,6 +143,13 @@ void Base3DOverlay::setProperties(const QVariantMap& originalProperties) { setIsGrabbable(isGrabbable.toBool()); } + auto isVisibleInSecondaryCamera = properties["isVisibleInSecondaryCamera"]; + if (isVisibleInSecondaryCamera.isValid()) { + bool value = isVisibleInSecondaryCamera.toBool(); + setIsVisibleInSecondaryCamera(value); + needRenderItemUpdate = true; + } + if (properties["position"].isValid()) { setLocalPosition(vec3FromVariant(properties["position"])); needRenderItemUpdate = true; @@ -221,6 +229,8 @@ void Base3DOverlay::setProperties(const QVariantMap& originalProperties) { * @property {boolean} drawInFront=false - If true, the overlay is rendered in front of other overlays that don't * have drawInFront set to true, and in front of entities. * @property {boolean} grabbable=false - Signal to grabbing scripts whether or not this overlay can be grabbed. + * @property {boolean} isVisibleInSecondaryCamera=false - If true, the overlay is rendered in secondary + * camera views. * @property {Uuid} parentID=null - The avatar, entity, or overlay that the overlay is parented to. * @property {number} parentJointIndex=65535 - Integer value specifying the skeleton joint that the overlay is attached to if * parentID is an avatar skeleton. A value of 65535 means "no joint". @@ -259,6 +269,9 @@ QVariant Base3DOverlay::getProperty(const QString& property) { if (property == "grabbable") { return _isGrabbable; } + if (property == "isVisibleInSecondaryCamera") { + return _isVisibleInSecondaryCamera; + } if (property == "parentID") { return getParentID(); } diff --git a/interface/src/ui/overlays/Base3DOverlay.h b/interface/src/ui/overlays/Base3DOverlay.h index bbf064fddd..8979081f7d 100644 --- a/interface/src/ui/overlays/Base3DOverlay.h +++ b/interface/src/ui/overlays/Base3DOverlay.h @@ -48,6 +48,7 @@ public: bool getDrawInFront() const { return _drawInFront; } bool getDrawHUDLayer() const { return _drawHUDLayer; } bool getIsGrabbable() const { return _isGrabbable; } + virtual bool getIsVisibleInSecondaryCamera() const override { return _isVisibleInSecondaryCamera; } void setIsSolid(bool isSolid) { _isSolid = isSolid; } void setIsDashedLine(bool isDashedLine) { _isDashedLine = isDashedLine; } @@ -55,6 +56,7 @@ public: virtual void setDrawInFront(bool value) { _drawInFront = value; } virtual void setDrawHUDLayer(bool value) { _drawHUDLayer = value; } void setIsGrabbable(bool value) { _isGrabbable = value; } + void setIsVisibleInSecondaryCamera(bool value) { _isVisibleInSecondaryCamera = value; } virtual AABox getBounds() const override = 0; @@ -92,6 +94,7 @@ protected: bool _drawInFront; bool _drawHUDLayer; bool _isGrabbable { false }; + bool _isVisibleInSecondaryCamera { false }; mutable bool _renderVariableDirty { true }; QString _name; diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 651213ae99..88b95be2c0 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -90,7 +90,9 @@ void ModelOverlay::update(float deltatime) { if (_visibleDirty) { _visibleDirty = false; // don't show overlays in mirrors - _model->setVisibleInScene(getVisible(), scene, render::ItemKey::TAG_BITS_0, false); + _model->setVisibleInScene(getVisible(), scene, + _isVisibleInSecondaryCamera ? render::ItemKey::TAG_BITS_ALL : render::ItemKey::TAG_BITS_0, + false); } if (_drawInFrontDirty) { _drawInFrontDirty = false; diff --git a/interface/src/ui/overlays/Overlay.h b/interface/src/ui/overlays/Overlay.h index f1be23ed39..2f27d50f7e 100644 --- a/interface/src/ui/overlays/Overlay.h +++ b/interface/src/ui/overlays/Overlay.h @@ -56,6 +56,8 @@ public: bool isLoaded() { return _isLoaded; } bool getVisible() const { return _visible; } virtual bool isTransparent() { return getAlphaPulse() != 0.0f || getAlpha() != 1.0f; }; + virtual bool getIsVisibleInSecondaryCamera() const { return false; } + xColor getColor(); float getAlpha(); diff --git a/interface/src/ui/overlays/OverlaysPayload.cpp b/interface/src/ui/overlays/OverlaysPayload.cpp index f99ced0021..1317cae629 100644 --- a/interface/src/ui/overlays/OverlaysPayload.cpp +++ b/interface/src/ui/overlays/OverlaysPayload.cpp @@ -49,7 +49,11 @@ namespace render { builder.withInvisible(); } - builder.withTagBits(render::ItemKey::TAG_BITS_0); // Only draw overlays in main view + uint32_t viewTaskBits = overlay->isVisibleInSecondaryCamera() ? + render::ItemKey::TAG_BITS_ALL : // draw in all views + render::ItemKey::TAG_BITS_0; // only the main view + + builder.withTagBits(viewTaskBits); return builder.build(); } From 602bc37b1a1a150ca15e9ac8af092bc608adbc69 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 13 Mar 2018 16:39:56 -0700 Subject: [PATCH 09/20] oops --- interface/src/ui/overlays/OverlaysPayload.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/overlays/OverlaysPayload.cpp b/interface/src/ui/overlays/OverlaysPayload.cpp index 1317cae629..a86804d4c4 100644 --- a/interface/src/ui/overlays/OverlaysPayload.cpp +++ b/interface/src/ui/overlays/OverlaysPayload.cpp @@ -49,7 +49,7 @@ namespace render { builder.withInvisible(); } - uint32_t viewTaskBits = overlay->isVisibleInSecondaryCamera() ? + uint32_t viewTaskBits = overlay->getIsVisibleInSecondaryCamera() ? render::ItemKey::TAG_BITS_ALL : // draw in all views render::ItemKey::TAG_BITS_0; // only the main view From 2fd6bc4130af716a374ae2a13bccccce2a1a2876 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Wed, 14 Mar 2018 10:24:44 -0700 Subject: [PATCH 10/20] rename Mesh api getPos3 to getPos, deprecate but still support getPos3 --- libraries/graphics/src/graphics/Geometry.h | 2 +- .../src/model-networking/SimpleMeshProxy.cpp | 4 ++-- .../model-networking/src/model-networking/SimpleMeshProxy.h | 4 ++-- libraries/shared/src/RegisteredMetaTypes.h | 5 +++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/libraries/graphics/src/graphics/Geometry.h b/libraries/graphics/src/graphics/Geometry.h index a75fb1bf62..485542d26b 100755 --- a/libraries/graphics/src/graphics/Geometry.h +++ b/libraries/graphics/src/graphics/Geometry.h @@ -74,7 +74,7 @@ public: size_t getNumIndices() const { return _indexBuffer.getNumElements(); } // Access vertex position value - const Vec3& getPos3(Index index) const { return _vertexBuffer.get(index); } + const Vec3& getPos(Index index) const { return _vertexBuffer.get(index); } enum Topology { POINTS = 0, diff --git a/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp b/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp index 741478789e..8f3d1ffec1 100644 --- a/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp +++ b/libraries/model-networking/src/model-networking/SimpleMeshProxy.cpp @@ -21,7 +21,7 @@ int SimpleMeshProxy::getNumVertices() const { return (int)_mesh->getNumVertices(); } -glm::vec3 SimpleMeshProxy::getPos3(int index) const { - return _mesh->getPos3(index); +glm::vec3 SimpleMeshProxy::getPos(int index) const { + return _mesh->getPos(index); } diff --git a/libraries/model-networking/src/model-networking/SimpleMeshProxy.h b/libraries/model-networking/src/model-networking/SimpleMeshProxy.h index 24c3fca27e..073eb1c00f 100644 --- a/libraries/model-networking/src/model-networking/SimpleMeshProxy.h +++ b/libraries/model-networking/src/model-networking/SimpleMeshProxy.h @@ -26,8 +26,8 @@ public: int getNumVertices() const override; - glm::vec3 getPos3(int index) const override; - + glm::vec3 getPos(int index) const override; + glm::vec3 getPos3(int index) const override { return getPos(index); } // deprecated protected: const MeshPointer _mesh; diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index 4fee78a0db..78e368748b 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -363,12 +363,13 @@ public: /**jsdoc * Get the position of a vertex in the mesh. - * @function MeshProxy#getPos3 + * @function MeshProxy#getPos * @param {number} index - Integer index of the mesh vertex. * @returns {Vec3} Local position of the vertex relative to the mesh. * @deprecated Use the {@link Graphics} API instead. */ - Q_INVOKABLE virtual glm::vec3 getPos3(int index) const = 0; + Q_INVOKABLE virtual glm::vec3 getPos(int index) const = 0; + Q_INVOKABLE virtual glm::vec3 getPos3(int index) const { return getPos(index); } // deprecated }; Q_DECLARE_METATYPE(MeshProxy*); From 884da98466d258d073456bf1a3eed9a493340d3b Mon Sep 17 00:00:00 2001 From: Gabriel Calero Date: Wed, 14 Mar 2018 14:50:44 -0300 Subject: [PATCH 11/20] Change default mode to My View (android) --- scripts/system/+android/modes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/+android/modes.js b/scripts/system/+android/modes.js index b29548094f..097798e393 100644 --- a/scripts/system/+android/modes.js +++ b/scripts/system/+android/modes.js @@ -17,7 +17,7 @@ var currentSelectedBtn; var SETTING_CURRENT_MODE_KEY = 'Android/Mode'; var MODE_VR = "VR", MODE_RADAR = "RADAR", MODE_MY_VIEW = "MY VIEW"; -var DEFAULT_MODE = MODE_RADAR; +var DEFAULT_MODE = MODE_MY_VIEW; var logEnabled = true; var radar = Script.require('./radar.js'); From baa4dc3383ccb6057b886b1b68230f0ab6141dab Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Wed, 14 Mar 2018 11:38:46 -0700 Subject: [PATCH 12/20] Don't leave trash web processes when changing web entity urls --- .../src/RenderableWebEntityItem.cpp | 114 ++++++++++++------ .../src/RenderableWebEntityItem.h | 14 ++- 2 files changed, 83 insertions(+), 45 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index f7aaa43b7d..52b9364e98 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -46,6 +46,19 @@ static int YOUTUBE_MAX_FPS = 30; static QTouchDevice _touchDevice; +WebEntityRenderer::ContentType WebEntityRenderer::getContentType(const QString& urlString) { + if (urlString.isEmpty()) { + return ContentType::NoContent; + } + + const QUrl url(urlString); + if (url.scheme() == "http" || url.scheme() == "https" || + urlString.toLower().endsWith(".htm") || urlString.toLower().endsWith(".html")) { + return ContentType::HtmlContent; + } + return ContentType::QmlContent; +} + WebEntityRenderer::WebEntityRenderer(const EntityItemPointer& entity) : Parent(entity) { static std::once_flag once; std::call_once(once, [&]{ @@ -123,13 +136,45 @@ void WebEntityRenderer::onTimeout() { } void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene, Transaction& transaction, const TypedEntityPointer& entity) { - withWriteLock([&] { - // This work must be done on the main thread - if (!hasWebSurface()) { - // If we couldn't create a new web surface, exit - if (!buildWebSurface(entity)) { - return; + // If the content type has changed, or the old content type was QML, we need to + // destroy the existing surface (because surfaces don't support changing the root + // object, so subsequent loads of content just overlap the existing content + bool urlChanged = false; + { + auto newSourceUrl = entity->getSourceUrl(); + auto newContentType = getContentType(newSourceUrl); + auto currentContentType = ContentType::NoContent; + withReadLock([&] { + urlChanged = _lastSourceUrl != newSourceUrl; + currentContentType = _contentType; + }); + + if (urlChanged) { + if (newContentType != ContentType::HtmlContent || currentContentType != ContentType::HtmlContent) { + destroyWebSurface(); } + + withWriteLock([&] { + _lastSourceUrl = newSourceUrl; + _contentType = newContentType; + }); + } + } + + + withWriteLock([&] { + if (_contentType == ContentType::NoContent) { + return; + } + + // This work must be done on the main thread + // If we couldn't create a new web surface, exit + if (!hasWebSurface() && !buildWebSurface(entity)) { + return; + } + + if (urlChanged) { + _webSurface->getRootItem()->setProperty("url", _lastSourceUrl); } if (_contextPosition != entity->getWorldPosition()) { @@ -138,11 +183,6 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene _webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(_contextPosition)); } - if (_lastSourceUrl != entity->getSourceUrl()) { - _lastSourceUrl = entity->getSourceUrl(); - loadSourceURL(); - } - _lastDPI = entity->getDPI(); _lastLocked = entity->getLocked(); @@ -232,9 +272,6 @@ bool WebEntityRenderer::buildWebSurface(const TypedEntityPointer& entity) { // Let us interact with the keyboard surfaceContext->setContextProperty("tabletInterface", DependencyManager::get().data()); }); - _fadeStartTime = usecTimestampNow(); - loadSourceURL(); - _webSurface->resume(); // forward web events to EntityScriptingInterface auto entities = DependencyManager::get(); @@ -243,6 +280,29 @@ bool WebEntityRenderer::buildWebSurface(const TypedEntityPointer& entity) { emit entities->webEventReceived(entityItemID, message); }); + if (_contentType == ContentType::HtmlContent) { + // We special case YouTube URLs since we know they are videos that we should play with at least 30 FPS. + // FIXME this doesn't handle redirects or shortened URLs, consider using a signaling method from the + // web entity + if (QUrl(_lastSourceUrl).host().endsWith("youtube.com", Qt::CaseInsensitive)) { + _webSurface->setMaxFps(YOUTUBE_MAX_FPS); + } else { + _webSurface->setMaxFps(DEFAULT_MAX_FPS); + } + _webSurface->load("controls/WebEntityView.qml", [this](QQmlContext* context, QObject* item) { + item->setProperty("url", _lastSourceUrl); + }); + } else if (_contentType == ContentType::QmlContent) { + _webSurface->load(_lastSourceUrl, [this](QQmlContext* context, QObject* item) { + if (item && item->objectName() == "tabletRoot") { + auto tabletScriptingInterface = DependencyManager::get(); + tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface.data()); + } + }); + } + _fadeStartTime = usecTimestampNow(); + _webSurface->resume(); + return true; } @@ -289,32 +349,6 @@ glm::vec2 WebEntityRenderer::getWindowSize(const TypedEntityPointer& entity) con return dims; } -void WebEntityRenderer::loadSourceURL() { - const QUrl sourceUrl(_lastSourceUrl); - if (sourceUrl.scheme() == "http" || sourceUrl.scheme() == "https" || - _lastSourceUrl.toLower().endsWith(".htm") || _lastSourceUrl.toLower().endsWith(".html")) { - _contentType = htmlContent; - - // We special case YouTube URLs since we know they are videos that we should play with at least 30 FPS. - if (sourceUrl.host().endsWith("youtube.com", Qt::CaseInsensitive)) { - _webSurface->setMaxFps(YOUTUBE_MAX_FPS); - } else { - _webSurface->setMaxFps(DEFAULT_MAX_FPS); - } - - _webSurface->load("controls/WebEntityView.qml", [this](QQmlContext* context, QObject* item) { - item->setProperty("url", _lastSourceUrl); - }); - } else { - _contentType = qmlContent; - _webSurface->load(_lastSourceUrl); - if (_webSurface->getRootItem() && _webSurface->getRootItem()->objectName() == "tabletRoot") { - auto tabletScriptingInterface = DependencyManager::get(); - tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface.data()); - } - } -} - void WebEntityRenderer::hoverEnterEntity(const PointerEvent& event) { if (!_lastLocked && _webSurface) { PointerEvent webEvent = event; diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.h b/libraries/entities-renderer/src/RenderableWebEntityItem.h index 309e750f53..3100014e9b 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.h +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.h @@ -47,15 +47,19 @@ private: bool buildWebSurface(const TypedEntityPointer& entity); void destroyWebSurface(); bool hasWebSurface(); - void loadSourceURL(); glm::vec2 getWindowSize(const TypedEntityPointer& entity) const; + int _geometryId{ 0 }; - enum contentType { - htmlContent, - qmlContent + enum class ContentType { + NoContent, + HtmlContent, + QmlContent }; - contentType _contentType; + + static ContentType getContentType(const QString& urlString); + + ContentType _contentType{ ContentType::NoContent }; QSharedPointer _webSurface; glm::vec3 _contextPosition; gpu::TexturePointer _texture; From e59af8892a75885730114a43699deaa2fc09ab75 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Wed, 14 Mar 2018 12:08:35 -0700 Subject: [PATCH 13/20] make same changes to gles backend from taa pr --- libraries/gpu-gles/src/gpu/gl/GLBackend.cpp | 4 + libraries/gpu-gles/src/gpu/gl/GLBackend.h | 6 ++ .../gpu-gles/src/gpu/gl/GLBackendOutput.cpp | 20 +++++ .../gpu-gles/src/gpu/gl/GLBackendPipeline.cpp | 29 ++++++- .../src/gpu/gl/GLBackendTransform.cpp | 2 +- .../gpu-gles/src/gpu/gl/GLTexelFormat.cpp | 85 ++++++++++++++++++- .../render-utils/src/AntialiasingEffect.h | 2 +- 7 files changed, 142 insertions(+), 6 deletions(-) diff --git a/libraries/gpu-gles/src/gpu/gl/GLBackend.cpp b/libraries/gpu-gles/src/gpu/gl/GLBackend.cpp index e8e89a1da6..5dc2b1446c 100644 --- a/libraries/gpu-gles/src/gpu/gl/GLBackend.cpp +++ b/libraries/gpu-gles/src/gpu/gl/GLBackend.cpp @@ -93,12 +93,16 @@ GLBackend::CommandCall GLBackend::_commandCalls[Batch::NUM_COMMANDS] = (&::gpu::gl::GLBackend::do_setUniformBuffer), (&::gpu::gl::GLBackend::do_setResourceBuffer), (&::gpu::gl::GLBackend::do_setResourceTexture), + (&::gpu::gl::GLBackend::do_setResourceFramebufferSwapChainTexture), (&::gpu::gl::GLBackend::do_setFramebuffer), + (&::gpu::gl::GLBackend::do_setFramebufferSwapChain), (&::gpu::gl::GLBackend::do_clearFramebuffer), (&::gpu::gl::GLBackend::do_blit), (&::gpu::gl::GLBackend::do_generateTextureMips), + (&::gpu::gl::GLBackend::do_advance), + (&::gpu::gl::GLBackend::do_beginQuery), (&::gpu::gl::GLBackend::do_endQuery), (&::gpu::gl::GLBackend::do_getQuery), diff --git a/libraries/gpu-gles/src/gpu/gl/GLBackend.h b/libraries/gpu-gles/src/gpu/gl/GLBackend.h index 33bec07854..081bd78e85 100644 --- a/libraries/gpu-gles/src/gpu/gl/GLBackend.h +++ b/libraries/gpu-gles/src/gpu/gl/GLBackend.h @@ -123,15 +123,19 @@ public: // Resource Stage virtual void do_setResourceBuffer(const Batch& batch, size_t paramOffset) final; virtual void do_setResourceTexture(const Batch& batch, size_t paramOffset) final; + virtual void do_setResourceFramebufferSwapChainTexture(const Batch& batch, size_t paramOffset) final; // Pipeline Stage virtual void do_setPipeline(const Batch& batch, size_t paramOffset) final; // Output stage virtual void do_setFramebuffer(const Batch& batch, size_t paramOffset) final; + virtual void do_setFramebufferSwapChain(const Batch& batch, size_t paramOffset) final; virtual void do_clearFramebuffer(const Batch& batch, size_t paramOffset) final; virtual void do_blit(const Batch& batch, size_t paramOffset) = 0; + virtual void do_advance(const Batch& batch, size_t paramOffset) final; + // Query section virtual void do_beginQuery(const Batch& batch, size_t paramOffset) final; virtual void do_endQuery(const Batch& batch, size_t paramOffset) final; @@ -242,6 +246,8 @@ protected: void setupStereoSide(int side); #endif + virtual void setResourceTexture(unsigned int slot, const TexturePointer& resourceTexture); + virtual void setFramebuffer(const FramebufferPointer& framebuffer); virtual void initInput() final; virtual void killInput() final; virtual void syncInputStateCache() final; diff --git a/libraries/gpu-gles/src/gpu/gl/GLBackendOutput.cpp b/libraries/gpu-gles/src/gpu/gl/GLBackendOutput.cpp index 45c0de8ed7..0f36f86c88 100644 --- a/libraries/gpu-gles/src/gpu/gl/GLBackendOutput.cpp +++ b/libraries/gpu-gles/src/gpu/gl/GLBackendOutput.cpp @@ -37,6 +37,19 @@ void GLBackend::resetOutputStage() { void GLBackend::do_setFramebuffer(const Batch& batch, size_t paramOffset) { auto framebuffer = batch._framebuffers.get(batch._params[paramOffset]._uint); + setFramebuffer(framebuffer); +} + +void GLBackend::do_setFramebufferSwapChain(const Batch& batch, size_t paramOffset) { + auto swapChain = batch._swapChains.get(batch._params[paramOffset]._uint); + if (swapChain) { + auto index = batch._params[paramOffset + 1]._uint; + FramebufferPointer framebuffer = static_cast(swapChain.get())->get(index); + setFramebuffer(framebuffer); + } +} + +void GLBackend::setFramebuffer(const FramebufferPointer& framebuffer) { if (_output._framebuffer != framebuffer) { auto newFBO = getFramebufferID(framebuffer); if (_output._drawFBO != newFBO) { @@ -47,6 +60,13 @@ void GLBackend::do_setFramebuffer(const Batch& batch, size_t paramOffset) { } } +void GLBackend::do_advance(const Batch& batch, size_t paramOffset) { + auto ringbuffer = batch._swapChains.get(batch._params[paramOffset]._uint); + if (ringbuffer) { + ringbuffer->advance(); + } +} + void GLBackend::do_clearFramebuffer(const Batch& batch, size_t paramOffset) { if (_stereo.isStereo() && !_pipeline._stateCache.scissorEnable) { qWarning("Clear without scissor in stereo mode"); diff --git a/libraries/gpu-gles/src/gpu/gl/GLBackendPipeline.cpp b/libraries/gpu-gles/src/gpu/gl/GLBackendPipeline.cpp index b80be8492f..7fdf6eca41 100644 --- a/libraries/gpu-gles/src/gpu/gl/GLBackendPipeline.cpp +++ b/libraries/gpu-gles/src/gpu/gl/GLBackendPipeline.cpp @@ -251,6 +251,31 @@ void GLBackend::do_setResourceTexture(const Batch& batch, size_t paramOffset) { releaseResourceTexture(slot); return; } + setResourceTexture(slot, resourceTexture); +} + +void GLBackend::do_setResourceFramebufferSwapChainTexture(const Batch& batch, size_t paramOffset) { + GLuint slot = batch._params[paramOffset + 1]._uint; + if (slot >= (GLuint)MAX_NUM_RESOURCE_TEXTURES) { + qCDebug(gpugllogging) << "GLBackend::do_setResourceFramebufferSwapChainTexture: Trying to set a resource Texture at slot #" << slot << " which doesn't exist. MaxNumResourceTextures = " << getMaxNumResourceTextures(); + return; + } + + SwapChainPointer swapChain = batch._swapChains.get(batch._params[paramOffset + 0]._uint); + + if (!swapChain) { + releaseResourceTexture(slot); + return; + } + auto index = batch._params[paramOffset + 2]._uint; + auto renderBufferSlot = batch._params[paramOffset + 3]._uint; + FramebufferPointer resourceFramebuffer = static_cast(swapChain.get())->get(index); + TexturePointer resourceTexture = resourceFramebuffer->getRenderBuffer(renderBufferSlot); + + setResourceTexture(slot, resourceTexture); +} + +void GLBackend::setResourceTexture(unsigned int slot, const TexturePointer& resourceTexture) { // check cache before thinking if (_resource._textures[slot] == resourceTexture) { return; @@ -267,11 +292,11 @@ void GLBackend::do_setResourceTexture(const Batch& batch, size_t paramOffset) { glActiveTexture(GL_TEXTURE0 + slot); glBindTexture(target, to); - (void) CHECK_GL_ERROR(); + (void)CHECK_GL_ERROR(); _resource._textures[slot] = resourceTexture; - _stats._RSAmountTextureMemoryBounded += (int) object->size(); + _stats._RSAmountTextureMemoryBounded += (int)object->size(); } else { releaseResourceTexture(slot); diff --git a/libraries/gpu-gles/src/gpu/gl/GLBackendTransform.cpp b/libraries/gpu-gles/src/gpu/gl/GLBackendTransform.cpp index f286a5cca9..72aaa5aa66 100644 --- a/libraries/gpu-gles/src/gpu/gl/GLBackendTransform.cpp +++ b/libraries/gpu-gles/src/gpu/gl/GLBackendTransform.cpp @@ -105,7 +105,7 @@ void GLBackend::TransformStageState::preUpdate(size_t commandIndex, const Stereo if (_viewIsCamera && (_viewCorrectionEnabled && _correction.correction != glm::mat4())) { // FIXME should I switch to using the camera correction buffer in Transform.slf and leave this out? Transform result; - _view.mult(result, _view, _correction.correction); + _view.mult(result, _view, _correction.correctionInverse); if (_skybox) { result.setTranslation(vec3()); } diff --git a/libraries/gpu-gles/src/gpu/gl/GLTexelFormat.cpp b/libraries/gpu-gles/src/gpu/gl/GLTexelFormat.cpp index 2a39901ee7..bad6c3456c 100644 --- a/libraries/gpu-gles/src/gpu/gl/GLTexelFormat.cpp +++ b/libraries/gpu-gles/src/gpu/gl/GLTexelFormat.cpp @@ -173,7 +173,47 @@ GLenum GLTexelFormat::evalGLTexelFormatInternal(const gpu::Element& dstFormat) { case gpu::RGB: case gpu::RGBA: case gpu::XY: - result = GL_RG8; + switch (dstFormat.getType()) { + case gpu::UINT32: + result = GL_RG32UI; + break; + case gpu::INT32: + result = GL_RG32I; + break; + case gpu::FLOAT: + result = GL_RG32F; + break; + case gpu::UINT16: + result = GL_RG16UI; + break; + case gpu::INT16: + result = GL_RG16I; + break; + case gpu::HALF: + result = GL_RG16F; + break; + case gpu::UINT8: + result = GL_RG8UI; + break; + case gpu::INT8: + result = GL_RG8I; + break; + case gpu::NUINT8: + result = GL_RG8; + break; + case gpu::NINT8: + result = GL_RG8_SNORM; + break; + case gpu::NUINT32: + case gpu::NINT32: + case gpu::NUINT2: + case gpu::NINT2_10_10_10: + case gpu::COMPRESSED: + case gpu::NUINT16: + case gpu::NINT16: + case gpu::NUM_TYPES: // quiet compiler + Q_UNREACHABLE(); + } break; default: qCWarning(gpugllogging) << "Unknown combination of texel format"; @@ -312,7 +352,48 @@ GLTexelFormat GLTexelFormat::evalGLTexelFormat(const Element& dstFormat, const E case gpu::RGB: case gpu::RGBA: case gpu::XY: - texel.internalFormat = GL_RG8; + switch (dstFormat.getType()) { + case gpu::UINT32: + texel.internalFormat = GL_RG32UI; + break; + case gpu::INT32: + texel.internalFormat = GL_RG32I; + break; + case gpu::FLOAT: + texel.internalFormat = GL_RG32F; + break; + case gpu::UINT16: + texel.internalFormat = GL_RG16UI; + break; + case gpu::INT16: + texel.internalFormat = GL_RG16I; + break; + case gpu::HALF: + texel.type = GL_FLOAT; + texel.internalFormat = GL_RG16F; + break; + case gpu::UINT8: + texel.internalFormat = GL_RG8UI; + break; + case gpu::INT8: + texel.internalFormat = GL_RG8I; + break; + case gpu::NUINT8: + texel.internalFormat = GL_RG8; + break; + case gpu::NINT8: + texel.internalFormat = GL_RG8_SNORM; + break; + case gpu::NUINT32: + case gpu::NINT32: + case gpu::NUINT2: + case gpu::NINT2_10_10_10: + case gpu::COMPRESSED: + case gpu::NUINT16: + case gpu::NINT16: + case gpu::NUM_TYPES: // quiet compiler + Q_UNREACHABLE(); + } break; default: qCWarning(gpugllogging) << "Unknown combination of texel format"; diff --git a/libraries/render-utils/src/AntialiasingEffect.h b/libraries/render-utils/src/AntialiasingEffect.h index da9a0bd384..03fdb9d9a4 100644 --- a/libraries/render-utils/src/AntialiasingEffect.h +++ b/libraries/render-utils/src/AntialiasingEffect.h @@ -88,7 +88,7 @@ class AntialiasingConfig : public render::Job::Config { Q_PROPERTY(float blend MEMBER blend NOTIFY dirty) Q_PROPERTY(float sharpen MEMBER sharpen NOTIFY dirty) Q_PROPERTY(float covarianceGamma MEMBER covarianceGamma NOTIFY dirty) - + Q_PROPERTY(bool constrainColor MEMBER constrainColor NOTIFY dirty) Q_PROPERTY(bool feedbackColor MEMBER feedbackColor NOTIFY dirty) From e744edc6a0532e5d9738af066ad2d622f6d958db Mon Sep 17 00:00:00 2001 From: Gabriel Calero Date: Wed, 14 Mar 2018 18:11:23 -0300 Subject: [PATCH 14/20] Possible fix for keyboard crash --- libraries/qml/src/qml/OffscreenSurface.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libraries/qml/src/qml/OffscreenSurface.cpp b/libraries/qml/src/qml/OffscreenSurface.cpp index 704111762a..d6c11537e6 100644 --- a/libraries/qml/src/qml/OffscreenSurface.cpp +++ b/libraries/qml/src/qml/OffscreenSurface.cpp @@ -181,7 +181,17 @@ bool OffscreenSurface::eventFilter(QObject* originalDestination, QEvent* event) } break; } - case QEvent::InputMethod: + case QEvent::InputMethod: { + auto window = getWindow(); + if (window && window->activeFocusItem()) { + event->ignore(); + if (QCoreApplication::sendEvent(window->activeFocusItem(), event)) { + return event->isAccepted(); + } + return false; + } + break; + } case QEvent::InputMethodQuery: { auto window = getWindow(); if (window && window->activeFocusItem()) { From d0f1aa9020736917ee3baf647a1c530dd5b3986d Mon Sep 17 00:00:00 2001 From: Gabriel Calero Date: Wed, 14 Mar 2018 19:18:42 -0300 Subject: [PATCH 15/20] Refactor fix for keyboard crash --- libraries/qml/src/qml/OffscreenSurface.cpp | 24 ++++++++-------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/libraries/qml/src/qml/OffscreenSurface.cpp b/libraries/qml/src/qml/OffscreenSurface.cpp index d6c11537e6..6580c5b1e8 100644 --- a/libraries/qml/src/qml/OffscreenSurface.cpp +++ b/libraries/qml/src/qml/OffscreenSurface.cpp @@ -181,28 +181,20 @@ bool OffscreenSurface::eventFilter(QObject* originalDestination, QEvent* event) } break; } - case QEvent::InputMethod: { - auto window = getWindow(); - if (window && window->activeFocusItem()) { - event->ignore(); - if (QCoreApplication::sendEvent(window->activeFocusItem(), event)) { - return event->isAccepted(); - } - return false; - } - break; - } + case QEvent::InputMethod: case QEvent::InputMethodQuery: { auto window = getWindow(); if (window && window->activeFocusItem()) { event->ignore(); if (QCoreApplication::sendEvent(window->activeFocusItem(), event)) { bool eventAccepted = event->isAccepted(); - QInputMethodQueryEvent* imqEvent = static_cast(event); - // this block disables the selection cursor in android which appears in - // the top-left corner of the screen - if (imqEvent->queries() & Qt::ImEnabled) { - imqEvent->setValue(Qt::ImEnabled, QVariant(false)); + if (event->type() == QEvent::InputMethodQuery) { + QInputMethodQueryEvent *imqEvent = static_cast(event); + // this block disables the selection cursor in android which appears in + // the top-left corner of the screen + if (imqEvent->queries() & Qt::ImEnabled) { + imqEvent->setValue(Qt::ImEnabled, QVariant(false)); + } } return eventAccepted; } From b22e0f6209176175c297c582c038a93bdef173ec Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 15 Mar 2018 09:55:42 -0700 Subject: [PATCH 16/20] use TAG_BITS_1 for cam rather than TAG_BITS_ALL --- interface/src/ui/overlays/ModelOverlay.cpp | 5 +++-- interface/src/ui/overlays/OverlaysPayload.cpp | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 88b95be2c0..7f19cf1fc7 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -89,9 +89,10 @@ void ModelOverlay::update(float deltatime) { } if (_visibleDirty) { _visibleDirty = false; - // don't show overlays in mirrors + // don't show overlays in mirrors or spectator-cam unless _isVisibleInSecondaryCamera is true _model->setVisibleInScene(getVisible(), scene, - _isVisibleInSecondaryCamera ? render::ItemKey::TAG_BITS_ALL : render::ItemKey::TAG_BITS_0, + render::ItemKey::TAG_BITS_0 | + _isVisibleInSecondaryCamera ? render::ItemKey::TAG_BITS_1 : render::ItemKey::TAG_BITS_NONE, false); } if (_drawInFrontDirty) { diff --git a/interface/src/ui/overlays/OverlaysPayload.cpp b/interface/src/ui/overlays/OverlaysPayload.cpp index a86804d4c4..0a18acf447 100644 --- a/interface/src/ui/overlays/OverlaysPayload.cpp +++ b/interface/src/ui/overlays/OverlaysPayload.cpp @@ -49,9 +49,9 @@ namespace render { builder.withInvisible(); } - uint32_t viewTaskBits = overlay->getIsVisibleInSecondaryCamera() ? - render::ItemKey::TAG_BITS_ALL : // draw in all views - render::ItemKey::TAG_BITS_0; // only the main view + // always visible in primary view. if isVisibleInSecondaryCamera, also draw in secondary view + uint32_t viewTaskBits = render::ItemKey::TAG_BITS_0 | + overlay->getIsVisibleInSecondaryCamera() ? render::ItemKey::TAG_BITS_1 : render::ItemKey::TAG_BITS_NONE; builder.withTagBits(viewTaskBits); From a5b94f22fa92c5decc13e2c26f0ebc26af72ef0b Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 15 Mar 2018 10:31:55 -0700 Subject: [PATCH 17/20] works now --- interface/src/ui/overlays/Base3DOverlay.h | 2 +- interface/src/ui/overlays/ModelOverlay.cpp | 2 +- interface/src/ui/overlays/ModelOverlay.h | 5 +++++ interface/src/ui/overlays/OverlaysPayload.cpp | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/interface/src/ui/overlays/Base3DOverlay.h b/interface/src/ui/overlays/Base3DOverlay.h index 8979081f7d..ab83a64273 100644 --- a/interface/src/ui/overlays/Base3DOverlay.h +++ b/interface/src/ui/overlays/Base3DOverlay.h @@ -56,7 +56,7 @@ public: virtual void setDrawInFront(bool value) { _drawInFront = value; } virtual void setDrawHUDLayer(bool value) { _drawHUDLayer = value; } void setIsGrabbable(bool value) { _isGrabbable = value; } - void setIsVisibleInSecondaryCamera(bool value) { _isVisibleInSecondaryCamera = value; } + virtual void setIsVisibleInSecondaryCamera(bool value) { _isVisibleInSecondaryCamera = value; } virtual AABox getBounds() const override = 0; diff --git a/interface/src/ui/overlays/ModelOverlay.cpp b/interface/src/ui/overlays/ModelOverlay.cpp index 7f19cf1fc7..1c00f57eec 100644 --- a/interface/src/ui/overlays/ModelOverlay.cpp +++ b/interface/src/ui/overlays/ModelOverlay.cpp @@ -92,7 +92,7 @@ void ModelOverlay::update(float deltatime) { // don't show overlays in mirrors or spectator-cam unless _isVisibleInSecondaryCamera is true _model->setVisibleInScene(getVisible(), scene, render::ItemKey::TAG_BITS_0 | - _isVisibleInSecondaryCamera ? render::ItemKey::TAG_BITS_1 : render::ItemKey::TAG_BITS_NONE, + (_isVisibleInSecondaryCamera ? render::ItemKey::TAG_BITS_1 : render::ItemKey::TAG_BITS_NONE), false); } if (_drawInFrontDirty) { diff --git a/interface/src/ui/overlays/ModelOverlay.h b/interface/src/ui/overlays/ModelOverlay.h index 88a1729d68..3ef3f23fec 100644 --- a/interface/src/ui/overlays/ModelOverlay.h +++ b/interface/src/ui/overlays/ModelOverlay.h @@ -36,6 +36,11 @@ public: void clearSubRenderItemIDs(); void setSubRenderItemIDs(const render::ItemIDs& ids); + virtual void setIsVisibleInSecondaryCamera(bool value) override { + Base3DOverlay::setIsVisibleInSecondaryCamera(value); + _visibleDirty = true; + } + void setProperties(const QVariantMap& properties) override; QVariant getProperty(const QString& property) override; virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, diff --git a/interface/src/ui/overlays/OverlaysPayload.cpp b/interface/src/ui/overlays/OverlaysPayload.cpp index 0a18acf447..185547a333 100644 --- a/interface/src/ui/overlays/OverlaysPayload.cpp +++ b/interface/src/ui/overlays/OverlaysPayload.cpp @@ -51,7 +51,7 @@ namespace render { // always visible in primary view. if isVisibleInSecondaryCamera, also draw in secondary view uint32_t viewTaskBits = render::ItemKey::TAG_BITS_0 | - overlay->getIsVisibleInSecondaryCamera() ? render::ItemKey::TAG_BITS_1 : render::ItemKey::TAG_BITS_NONE; + (overlay->getIsVisibleInSecondaryCamera() ? render::ItemKey::TAG_BITS_1 : render::ItemKey::TAG_BITS_NONE); builder.withTagBits(viewTaskBits); From 8a0b8aa034df1b22282da00de4d549749766010e Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 15 Mar 2018 11:01:13 -0700 Subject: [PATCH 18/20] make tablet invisible in secondary-camera if wallet passphrase page is up --- scripts/system/marketplaces/marketplaces.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index b3ca300022..f1a99500db 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -9,7 +9,8 @@ // /* global Tablet, Script, HMD, UserActivityLogger, Entities, Account, Wallet, ContextOverlay, Settings, Camera, Vec3, - Quat, MyAvatar, Clipboard, Menu, Grid, Uuid, GlobalServices, openLoginWindow */ + Quat, MyAvatar, Clipboard, Menu, Grid, Uuid, GlobalServices, openLoginWindow, Overlays, SoundCache, + DesktopPreviewProvider */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ var selectionDisplay = null; // for gridTool.js to ignore @@ -117,6 +118,13 @@ var selectionDisplay = null; // for gridTool.js to ignore var onWalletScreen = false; var onCommerceScreen = false; + function setTabletVisibleInSecondaryCamera(visibleInSecondaryCam) { + Overlays.editOverlay(HMD.tabletID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); + Overlays.editOverlay(HMD.homeButtonID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); + Overlays.editOverlay(HMD.homeButtonHighlightIDtabletID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); + Overlays.editOverlay(HMD.tabletScreenID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); + } + function onScreenChanged(type, url) { onMarketplaceScreen = type === "Web" && url.indexOf(MARKETPLACE_URL) !== -1; var onWalletScreenNow = url.indexOf(MARKETPLACE_WALLET_QML_PATH) !== -1; @@ -127,6 +135,7 @@ var selectionDisplay = null; // for gridTool.js to ignore if (isHmdPreviewDisabledBySecurity) { DesktopPreviewProvider.setPreviewDisabledReason("USER"); Menu.setIsOptionChecked("Disable Preview", false); + setTabletVisibleInSecondaryCamera(true); isHmdPreviewDisabledBySecurity = false; } } @@ -245,7 +254,7 @@ var selectionDisplay = null; // for gridTool.js to ignore var wearableDimensions = null; if (itemType === "contentSet") { - console.log("Item is a content set; codepath shouldn't go here.") + console.log("Item is a content set; codepath shouldn't go here."); return; } @@ -575,6 +584,7 @@ var selectionDisplay = null; // for gridTool.js to ignore if (!isHmdPreviewDisabled) { DesktopPreviewProvider.setPreviewDisabledReason("SECURE_SCREEN"); Menu.setIsOptionChecked("Disable Preview", true); + setTabletVisibleInSecondaryCamera(false); isHmdPreviewDisabledBySecurity = true; } break; @@ -582,6 +592,7 @@ var selectionDisplay = null; // for gridTool.js to ignore if (isHmdPreviewDisabledBySecurity) { DesktopPreviewProvider.setPreviewDisabledReason("USER"); Menu.setIsOptionChecked("Disable Preview", false); + setTabletVisibleInSecondaryCamera(true); isHmdPreviewDisabledBySecurity = false; } break; From a64f0d2779a6e928b36255d988d73240dff9086f Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 15 Mar 2018 11:39:05 -0700 Subject: [PATCH 19/20] if tablet wasn't visible when wallet passphrase screen hid it, don't show it when passphrase page is done. --- scripts/system/marketplaces/marketplaces.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index f1a99500db..32dbe0a43b 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -117,8 +117,19 @@ var selectionDisplay = null; // for gridTool.js to ignore var onWalletScreen = false; var onCommerceScreen = false; + var tabletShouldBeVisibleInSecondaryCamera = false; function setTabletVisibleInSecondaryCamera(visibleInSecondaryCam) { + if (visibleInSecondaryCam) { + // if we're potentially showing the tablet, only do so if it was visible before + if (!tabletShouldBeVisibleInSecondaryCamera) { + return; + } + } else { + // if we're hiding the tablet, check to see if it was visible in the first place + tabletShouldBeVisibleInSecondaryCamera = Overlays.getProperty(HMD.tabletID, "isVisibleInSecondaryCamera"); + } + Overlays.editOverlay(HMD.tabletID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); Overlays.editOverlay(HMD.homeButtonID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); Overlays.editOverlay(HMD.homeButtonHighlightIDtabletID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); From f6c4f6b9c4aa9494458244f7a752de884b66a6f4 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 15 Mar 2018 13:06:27 -0700 Subject: [PATCH 20/20] Fix for arm IK jitter When in HMD mode, holding your hand controller in front of your face, would often result in a 1-2 mm pop in wrist position. This was due to a problem in the IK elbow constraint. When the swing rotation out of the elbow's reference frame was close to but not exactly identity it would not be properly constrainted. But when the magnitude of that swing became big enough the constraint would engage. This small change in swing rotation was noticable as a 1-2 mm movement in the wrist. --- libraries/animation/src/ElbowConstraint.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/libraries/animation/src/ElbowConstraint.cpp b/libraries/animation/src/ElbowConstraint.cpp index 17c6bb2da6..deaf1a0945 100644 --- a/libraries/animation/src/ElbowConstraint.cpp +++ b/libraries/animation/src/ElbowConstraint.cpp @@ -66,16 +66,12 @@ bool ElbowConstraint::apply(glm::quat& rotation) const { bool twistWasClamped = (twistAngle != clampedTwistAngle); // update rotation - const float MIN_SWING_REAL_PART = 0.99999f; - if (twistWasClamped || fabsf(swingRotation.w) < MIN_SWING_REAL_PART) { - if (twistWasClamped) { - twistRotation = glm::angleAxis(clampedTwistAngle, _axis); - } - // we discard all swing and only keep twist - rotation = twistRotation * _referenceRotation; - return true; + if (twistWasClamped) { + twistRotation = glm::angleAxis(clampedTwistAngle, _axis); } - return false; + // we discard all swing and only keep twist + rotation = twistRotation * _referenceRotation; + return true; } glm::quat ElbowConstraint::computeCenterRotation() const {