現代のUIにおけるガラスの魅力
ユーザーインターフェースに透明・半透明の要素を用いる魅力は明白だ。ガラス風のデザインは現代性と上品さをbringし、デジタル空間に奥行きと明確な階層を产生する illusions によって視覚的階層 crisply な claramenteSci。1 この魅力は単なる一時的な美的流行ではない。テクノロジー的に高度であり、直感的に整理されたインターフェースに対するユーザーの根本的な欲求に響いている。
「グラスモーフィズム」という語は、このようなUIの潮流を指すために使われてきた。その特徴は、背景のぼかし(多くの場合、CSSのbackdrop-filterプロパティで実現)、透明度、奥行きを再現する多層的な手法、そして「ガラス」のパネル越しに部分的に見える鮮やかなカラフルな背景などにある。3 控えめなボーダーやハイライトを加えると、半透明要素の輪郭がさらに際立ち、定義が明確になる。3
現代のグラスモーフィズムに至るまでの道筋は、進化の過程として捉えられる。skeuomorphismが持つ実物に触れるような現実の模倣と、フラットデザインが持つミニマルで明快な美意識から着想し、両者の要素をmeltingして、視覚的には豊かでありながら機能的には直感的に操作できるユーザー体験を提供している。2 AppleはiOS 7で導入したフロsted effectとmacOS Big Surの半透明要素、MicrosoftはWindows VistaのAero GlassとFluent Design Systemの「Acrylic」マテリアル telephony mezzoで、ガラス風achaestheticsの popularizedとrefinement.push).
こうしたガラス風の効果が再浮上し、精緻に進化してきた過程は、初期OSのぼかしからグラスモーフィズムの細緻な技法を経て、Appleのцениerverなく動的な「Liquid Glass」に至るまで、UIデザインにおけるより広い潮流を示している。これは、etah starkで完全にフラットなインターフェースから明確に離れ、立体的で触覚的、そしてインタラクションに応じて動的に変化するユーザー体験へ向かう動きだ。
この変化は単なる美的嗜好ではない。ハードウェアの処理能力とソフトウェアベースのグラフィックス能力が大幅に向上したおかげで、可能になり促進されている。初期のskeuomorphismは、ユーザーに Gage finds familiarな現実のメタフォーを提供しようとしたが、視覚的に散らばったインターフェース-qualities resulting too often.2 フラットデザインは、単純さと明快さを優先する修正として台頭した。ただし、視覚的な奥行きや操作可能性を示す手がかりを削ることがあった。2 グラスモーフィズムは、この奥行きとテクスチャ豊かな表現をより精緻で現代的な manner reintroduces。2 AppleのLiquid Glassには、光との相互作用をシミュレートする野心的な「レンズ効果」9があり、大きな進化を示す。静的なガラスの見た目だけでなく、光との動的な相互作用 mimicking ambitious featで、強力なApple Siliconと高度なグラフィックスパイプラインによって実現可能になった。10 この進化は、インターフェースの明快さ、美的魅力、直感的で豊かなインタラクションの最適なバランスを求める業界全体の継続的な追求を示している。この追求は、進行する技術進歩と不可分に結びついている。
この稿では、HTML・CSS・SVGで実現した特定のカスタムガラス効果を比較分析する。これは、既存のWebテクノロジーを用いてガラス風の見せ方を組み立てるための実践的なケーススタディとなる。これをAppleの野心的な「Liquid Glass」と対比する。Appleはこれを単なるAnother visual effectとしてではなく、全面的に刷新されたOSの根幹に統合される新たなマテリアルとして提示している。10 目的は、両者の技術的な土台を分解し、視覚的な結果を比較し、カスタムWeb実装とAppleのネイティブマテリアルシステムを定義する異なるデザイン哲学と技術アーキテクチャを探ることにある。
Appleが「Liquid Glass」を中核的な「マテリアル」と位置付け、各プラットフォームで強力に Complaining していることは、その戦略的重要性を強調している。ハードウェアとソフトウェアのスタックに深くwovenな、差別化されたプレミアムなユーザー体験をCultivateするための意図的な 움직きと見える。これにより、競合が同じ水準の仕上げとパフォーマンスで效应を再現することは本質的に難しくなる。Appleのエコシステム戦略では、固有のユーザー体験がプラットフォームへの忠誠度と差別化に大きく寄与するからだ。12
カスタムCSS/SVGガラス効果の分解
Webでガラス効果を作る際の細部を理解するには、HTML・CSS・SVGを使った特定の実装を調べる価値がある。この手法では、標準的なWebテクノロジーを組み合わせ、洗練された視覚表現を実現する方法が示される。
土台:HTML構造
実装した効果の土台となるHTML構造は比較的単純だ。主に、背景環境と、ガラス効果を適用する対象要素を用意する。クラスbgを持つdiv要素が、3つのimg要素を収めるコンテナになる。これらの画像は安定した背景として機能し、ガラス効果の相互作用や歪みの対象となる視覚contentを提供する。ただし、ガラス機構そのものの直接的な構成要素ではない。
HTMLの核心は<button id="btn" class="glass">にある。このbutton要素にガラススタイルを適用し、インタラクティブな動作の中心とする。
スタイル:CSSの基盤
ガラスボタンの視覚的な特性は、主にCSSで定義される。
background: rgba(255,255,255,.08);:.glassクラスに適用されるこのルールは、ボタンにごく淡い半透明の白背景を与える。低い不透明度(8%)は重要だ。ボタンの背後に配置されたcontentが部分的に見えるようにするためだ。この透明性はbackdrop-filterプロパティの効果をはっきり sporesさせるうえで不可欠であり、ガラスらしい illusionを与える控えめな色味にも寄与する。border: 2px solid transparent;:ボタンには初期状態では透明なボーダーが指定される。ベーススタイルとして使い、別のCSSルールや、提供されたスニペットには明示されていないJavaScriptによるインタラクションで変更する意図があった可能性がある。box-shadow: 0 0 0 2px rgba(255,255,255,.6), 0 16px 32px rgba(0,0,0,.12);:この多層的なbox-shadowは、ガラス要素に奥行きと明快さを与えるうえで重要な役割を果たす。- 1つ目のシャドウ、
0 0 0 2px rgba(255,255,255,.6)は、控えめな外側のストロークや明るいエッジハイライトに似た働きをする。背景からガラス要素を視覚的に分離し、輪郭を明確にする。 - 2つ目のシャドウ、
0 16px 32px rgba(0,0,0,.12)は、より柔らかく、広がったドロップシャドウだ。要素が背後の表面からわずかに浮いて見える効果を生み、ガラスの立体的な見方を強める。
- 1つ目のシャドウ、
backdrop-filter: url(#frosted);(およびベンダープレフィックス版的-webkit-backdrop-filter):このCSSプロパティはガラス効果の中核となる。ブラウザに対し、SVGマークアップ内でid="frosted"として定義されたSVGフィルターを、.glassボタンの背後に適用するよう指示する。14 ボタン自身の背景が半透明であるため、フィルター処理された背景が見える。提示画像にある球体は、このフィルターを適用した要素を背景の上に置いたときの appearancesを示している。
魔法を掘り下げる:SVGフィルター(<filter id="frosted">)
視覚的な歪みとテクスチャの中心は、SVGフィルターによって実現される。SVGフィルターは、ブラウザ内で複雑な一連の画像処理操作を行う堅牢な手段を提供している。17 <filter>要素のprimitiveUnits="objectBoundingBox"属性は、子フィルタープリミティブ内で使う寸法値(x、y、width、heightなど)が、フィルターを適用するHTML要素のバウンディングボックスに対する百分率や割合として解釈されることを示す。
feImage href="data:image/png;base64,..." result="map":- このフィルタープリミティブは、外部画像リソースをフィルター処理のチェーンに導入する。17 今回の実装では、
href属性にbase64でエンコードしたPNG画像が含まれている。この埋め込み画像は、Perlinノイズなどの事前レンダリングされたノイズテクスチャ、あるいは同種のアルゴリズムで生成したパターンと考えられる。不規則さを加えるために利用される。 result="map"属性は重要だ。このfeImage操作の出力(読み込んだノイズテクスチャ)を、「map」という一時バッファに割り当てる。この「map」バッファは、続くフィルタープリミティブで変位マップとして使われる。
- このフィルタープリミティブは、外部画像リソースをフィルター処理のチェーンに導入する。17 今回の実装では、
feGaussianBlur in="SourceGraphic" stdDeviation="0.02" result="blur":- このプリミティブはガウスぼかしを適用する。
in="SourceGraphic"属性は、ぼかし処理の入力が、フィルター全体が適用されるHTML要素(つまりフィルター適用前のbutton)の元のグラフィックcontentであることを指定する。19 stdDeviation="0.02"は、ごく控えめなぼかしを示す。「フロsted」ガラス効果の文脈では、このわずかなぼかしが要素を通して見えるcontentを穏やかに拡散させ、フロstedな見た目を形づくる。このぼかし操作の出力は、「blur」という一時バッファに保存される。
- このプリミティブはガウスぼかしを適用する。
feDisplacementMap id="disp" in="blur" in2="map" scale="1" xChannelSelector="R" yChannelSelector="G":このプリミティブは、ガラス効果の歪みすなわち「liquid」な要素の中心となる。in="blur":変位させるピクセルの主入力画像は、「blur」バッファの内容(わずかにぼかした元グラフィック)である。17in2="map":副入力画像は、feImageで読み込んだノイズテクスチャを保持する「map」バッファの内容である。このノイズテクスチャのピクセルデータが、主入力画像内のピクセルをどの方向へ、どれだけ移動させるかを決める。17scale="1":この属性は、変位効果の倍率として作用する。変位的基础となる式P′(x,y)←P(x+scale⋅(XC(x,y)−0.5),y+scale⋅(YC(x,y)−0.5))20は、変位マップから得られるカラーチャネル値(XC、YC)に基づいて、scale係数がピクセルの移動量にどう影響するかを示す。scaleの値が大きいほど、歪みが際立つ。xChannelSelector="R"とyChannelSelector="G":これらの属性は、in2画像(ノイズの「map」)のどのカラーチャネルを使うかを指定する。 respectively、X軸とY軸の変位を制御する。ノイズテクスチャの赤(R)チャネルの強さはピクセルを水平方向へ、绿(G)チャネルの強さは垂直方向へ移動させる。20 マルチチャンネルのノイズテクスチャから異なるチャネルを使うことで、より複雑で均一でない歪みパターンを作れる。
<animate attributeName="scale" to="1.4" dur="0.3s" begin="btn.mouseover" fill="freeze"/>と<animate attributeName="scale" to="1" dur="0.3s" begin="btn.mouseout" fill="freeze"/>:- これらの要素は、SVG SMIL(Synchronized Multimedia Integration Language)を使ってアニメーションを行う。指定した時間 Outputs over、親SVG要素(この場合は
feDisplacementMapプリミティブ)の属性を直接操作する。 - 対象になるのは
feDisplacementMapのscale属性である。 begin="btn.mouseover":1つ目のアニメーションは、id="btn"を持つHTML要素にマウスポインターが乗ったときに開始される。scale属性を0.3sかけて1.4へ滑らかに移行し、歪み効果を強める。begin="btn.mouseout":2つ目のアニメーションは、マウスポインターがボタンから離れたときに始まる。scale属性を0.3sかけて1へ滑らかに戻し、歪みを基本レベルまで弱める。fill="freeze":この属性により、各アニメーション終了後もアニメーション対象属性(scale)が最終値を維持する。アニメーション開始前の元の値には戻らない。
- これらの要素は、SVG SMIL(Synchronized Multimedia Integration Language)を使ってアニメーションを行う。指定した時間 Outputs over、親SVG要素(この場合は
ここで示されているレイヤードな技術手法は、先進的なWeb UIではかなり一般的だ。HTMLがセマンティックな基盤を提供し、CSSが主要なスタイル、レイアウト、そして重要なbackdrop-filterのフックを管理する。SVGは、高度なグラフィック歪みを実現するための細かなピクセル単位の操作に使われる。この組み合わせた効果を、単一の技術レイヤーがHCR исследования easily bail alone第三人。
静的なノイズテクスチャを使うfeDisplacementMapは、Web開発者がテクスチャのある不完全なガラスを通る光の変化という複雑な光学現象を近似するための、計算負荷内で現実的な方法だ。物理的なシミュレーションそのものではなく、类似的感覚を喚起するよう設計されたアート表現である。Webグラフィックスでは、この手法が一般的だ。完全な物理シミュレーションは、広い范围的Webアプリケーションに用いるには性能負荷が大きすぎるため、複雑な現実世界の効果に対して効率的な視覚的メタファーを探す思维方式 wreak 된다。
視覚的な結果と特徴
CSSとSVGのルールを組み合わせることで、distinctな「frosted glass」効果が生まれる。主にbackdrop-filterがfeGaussianBlurプリミティブを含むSVGフィルターをボタンの背後へ適用することで実現している。button要素自体は、半透明の背景色によって透けて見える。
埋め込まれたノイズテクスチャを利用するfeDisplacementMapは、ガラスを通して見える景色に、控えめyet不規則な歪み=textureを加えるCertain certain。この効果Certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain certain that the intermediate value for the preceding key is 150.