浏览代码

Merge branch 'master' of https://github.com/Unity-Technologies/ScriptableRenderLoop into Branch_SkyLightingOverride

# Conflicts:
#	ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightLoop/LightLoop.cs
/feature-ReflectionProbeFit
Julien Ignace 7 年前
当前提交
f6a78dc5
共有 79 个文件被更改,包括 3729 次插入2614 次删除
  1. 999
      ImageTemplates/HDRenderPipeline/Scenes/1xxx_Materials/1202_Lit_DoubleSideNormalMode.unity.png
  2. 8
      SampleScenes/HDTest/AnimTest/Cube.mat
  3. 8
      SampleScenes/HDTest/AnimTest/Sphere.mat
  4. 721
      SampleScenes/HDTest/HDRenderLoopTest/ReflectionProbe-0.exr
  5. 799
      SampleScenes/HDTest/SkyFogTest.unity
  6. 4
      SampleScenes/HDTest/SkyFogTest/Rough_Refraction_Transparent.mat
  7. 60
      ScriptableRenderPipeline/Core/CoreRP/Editor/CoreEditorUtils.cs
  8. 23
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Camera/HDCamera.cs
  9. 15
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/HDAssetFactory.cs
  10. 4
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/HDEditorUtils.cs
  11. 2
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/HDRenderPipelineInspector.Styles.cs
  12. 20
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/HDRenderPipelineInspector.cs
  13. 31
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDReflectionProbeEditor.Data.cs
  14. 128
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDReflectionProbeEditor.Drawers.cs
  15. 464
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDReflectionProbeEditor.Handles.cs
  16. 103
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDReflectionProbeEditor.cs
  17. 11
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Lit/BaseLitUI.cs
  18. 5
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Lit/LitUI.cs
  19. 20
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Unlit/BaseUnlitUI.cs
  20. 2
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDCustomSamplerId.cs
  21. 24
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDRenderPipeline.cs
  22. 22
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDRenderPipelineAsset.cs
  23. 9
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDStringConstants.cs
  24. 15
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/HDAdditionalReflectionData.cs
  25. 23
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightDefinition.cs
  26. 72
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightDefinition.cs.hlsl
  27. 58
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightLoop/LightLoop.cs
  28. 25
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightUtilities.hlsl
  29. 5
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/LayeredLit/LayeredLit.shader
  30. 5
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/LayeredLit/LayeredLitTessellation.shader
  31. 106
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/Lit.hlsl
  32. 10
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/Lit.shader
  33. 10
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/LitTessellation.shader
  34. 92
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Unlit/Unlit.shader
  35. 18
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/RenderPipeline/FrameSettings.cs
  36. 5
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/RenderPipelineResources/DepthDownsample.compute
  37. 3
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/RenderPipelineResources/HDRenderPipelineResources.asset
  38. 4
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/RenderPipelineResources/RenderPipelineResources.cs
  39. 5
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/ShaderPass/VaryingMesh.hlsl
  40. 1
      ScriptableRenderPipeline/HDRenderPipeline/HDRP/ShaderVariables.hlsl
  41. 10
      TestbedPipelines/OnTileDeferredPipeline/Shaders/UnityStandardForwardMobile.cginc
  42. 536
      Tests/GraphicsTests/RenderPipeline/HDRenderPipeline/Scenes/1xxx_Materials/1202_Lit_DoubleSideNormalMode.unity
  43. 880
      Tests/GraphicsTests/RenderPipeline/HDRenderPipeline/Scenes/1xxx_Materials/1205_Lit_Transparent_Refraction.unity
  44. 854
      Tests/GraphicsTests/RenderPipeline/HDRenderPipeline/Scenes/1xxx_Materials/1206_Lit_Transparent_Distortion.unity
  45. 3
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Data/LightweightPipelineAsset.cs
  46. 5
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor/ShaderGUI.meta
  47. 4
      ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipeline.cs
  48. 2
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Shaders/LightweightShaderLibrary.meta
  49. 8
      ScriptableRenderPipeline/LightweightPipeline/LWRP.meta
  50. 8
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Data.meta
  51. 8
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor.meta
  52. 8
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Materials.meta
  53. 8
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Shaders.meta
  54. 16
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor/LightweightShaderIncludePaths.cs
  55. 11
      ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor/LightweightShaderIncludePaths.cs.meta
  56. 9
      ScriptableRenderPipeline/LightweightPipeline/Editor.meta
  57. 9
      ScriptableRenderPipeline/LightweightPipeline/Shaders.meta
  58. 9
      ScriptableRenderPipeline/LightweightPipeline/Materials.meta
  59. 8
      ScriptableRenderPipeline/LightweightPipeline/Data.meta
  60. 8
      Tests/GraphicsTests/RenderPipeline/LightweightPipeline/Scenes/030_Shader_RenderOrder.meta
  61. 0
      /ScriptableRenderPipeline/Core/CoreRP/com.unity.render-pipelines.core.Runtime.asmdef
  62. 0
      /ScriptableRenderPipeline/Core/CoreRP/com.unity.render-pipelines.core.Runtime.asmdef.meta
  63. 0
      /ScriptableRenderPipeline/HDRenderPipeline/HDRP/com.unity.render-pipelines.high-definition.Runtime.asmdef.meta
  64. 0
      /ScriptableRenderPipeline/HDRenderPipeline/HDRP/com.unity.render-pipelines.high-definition.Runtime.asmdef
  65. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipeline.cs.meta
  66. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipelineUtils.cs.meta
  67. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightConstantBuffer.cs.meta
  68. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightConstantBuffer.cs
  69. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipelineUtils.cs
  70. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/Materials
  71. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightShaderUtils.cs
  72. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightShaderUtils.cs.meta
  73. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/com.unity.render-pipelines.lightweight.Runtime.asmdef
  74. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/com.unity.render-pipelines.lightweight.Runtime.asmdef.meta
  75. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/Data
  76. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor
  77. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipeline.cs
  78. 0
      /ScriptableRenderPipeline/LightweightPipeline/LWRP/Shaders

999
ImageTemplates/HDRenderPipeline/Scenes/1xxx_Materials/1202_Lit_DoubleSideNormalMode.unity.png
文件差异内容过多而无法显示
查看文件

8
SampleScenes/HDTest/AnimTest/Cube.mat


m_PrefabInternal: {fileID: 0}
m_Name: Cube
m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3}
m_ShaderKeywords: _ALBEDOAFFECTEMISSIVE_OFF _ALPHACUTOFFENABLE_OFF _BLENDMODE_PRESERVE_SPECULAR_LIGHTING
_DEPTHOFFSETENABLE_OFF _DISTORTIONENABLE_OFF _DOUBLESIDEDENABLE_OFF _EMISSION
_ENABLEMOTIONVECTORFORVERTEXANIMATION_OFF _ENABLESPECULAROCCLUSION_OFF _ENABLEWIND_OFF
_NORMALMAP_TANGENT_SPACE _PREREFRACTIONPASS_OFF _TRANSPARENTBACKFACEENABLE_OFF
_TRANSPARENTDEPTHPOSTPASSENABLE_OFF _TRANSPARENTDEPTHPREPASSENABLE_OFF
m_ShaderKeywords: _BLENDMODE_PRESERVE_SPECULAR_LIGHTING _NORMALMAP_TANGENT_SPACE
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0

- DistortionVectors
- TransparentDepthPrepass
- TransparentDepthPostPass
- TransparentDepthPostpass
- TransparentBackface
- TransparentBackfaceDebugDisplay
- MOTIONVECTORS

8
SampleScenes/HDTest/AnimTest/Sphere.mat


m_PrefabInternal: {fileID: 0}
m_Name: Sphere
m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3}
m_ShaderKeywords: _ALBEDOAFFECTEMISSIVE_OFF _ALPHACUTOFFENABLE_OFF _BLENDMODE_PRESERVE_SPECULAR_LIGHTING
_DEPTHOFFSETENABLE_OFF _DISTORTIONENABLE_OFF _DOUBLESIDEDENABLE_OFF _EMISSION
_ENABLEMOTIONVECTORFORVERTEXANIMATION_OFF _ENABLESPECULAROCCLUSION_OFF _ENABLEWIND_OFF
_NORMALMAP_TANGENT_SPACE _PREREFRACTIONPASS_OFF _TRANSPARENTBACKFACEENABLE_OFF
_TRANSPARENTDEPTHPOSTPASSENABLE_OFF _TRANSPARENTDEPTHPREPASSENABLE_OFF
m_ShaderKeywords: _BLENDMODE_PRESERVE_SPECULAR_LIGHTING _NORMALMAP_TANGENT_SPACE
m_LightmapFlags: 1
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0

- DistortionVectors
- TransparentDepthPrepass
- TransparentDepthPostPass
- TransparentDepthPostpass
- TransparentBackface
- TransparentBackfaceDebugDisplay
- MOTIONVECTORS

721
SampleScenes/HDTest/HDRenderLoopTest/ReflectionProbe-0.exr


v/1channelschlist7BGRcompressioncompressiondataWindowbox2i�displayWindowbox2i�lineOrderlineOrderpixelAspectRatiofloat�?screenWindowCenterv2fscreenWindowWidthfloat�?Y�u��~@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ��~@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@��~@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`��~@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
v/1channelschlist7BGRcompressioncompressiondataWindowbox2i�displayWindowbox2i�lineOrderlineOrderpixelAspectRatiofloat�?screenWindowCenterv2fscreenWindowWidthfloat�?Y�g^��/9f� � �@��@�@@ "B��`�@A� �@ � B0�@���A�� �  ��1��Mn������oW���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������߿�����������������������߿������_���������߿������������������������������������������������ a"��a�q�q� �� �$�I$��(��(��(��0��,� 4� 0�N4�N4�M4�N<ӎ4��<��<8�8�5�<���A@�<9��;?��A?�;AC�?�<?��P<����=A�=A������������?�;AP��������O��P?�>C�<A�C�$??�4C��PC�@@�=>A�P����C�?C��C�TC��P����C��C�4>C�?C�;C�<@�?C�? C�<C�D? A�P������P����P���!���C��C�?
?���0�P����a�O�Đ�Q��C��C��?C�T=C��?C�t?C��?A���� �C�D?C�D?"C��?k?�S�C��?�C��??��C�D?����S������O���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������q�O�}�P�%��5А�%�P�����%�P�!??��>C��? C�?C�t? C��?��<�>;�=C�T<�C�4>A�Q�5AC�=PC��C�??�C��<<;C�<C������C�? C�? C�P���?��C�� �C�� ������P��@�������P�����ŏ����A?C��C�>@�=A�P��PAPP��P��@��PC�;A�;@����C�;C�@��<�<�<�����;���A�?��8�8�@�P@����8�8�8��5N@��4ӎ8�O8�N8�M4��0�M0Ì4�N0�L0� 0� 0� 0��,��(��,��(��(��(��$�I$�H �q�q�q�q�q�q�d_���:�Q�V�<+i+����N��IU�i�N�X.'H����}JDo����>���k}�X�^�X��,E�u�tJĈ�Y���A���X8T���� I���EIU�ă�@]�* e�%�
��A�t� ��Ł��b�AH%b�e
@ �p4��1D �EA((�5��+i���
�ZG�+�g�N�����@kƔ:�K�����A`�
�A��d,
�%A0�� BB䁹! PE�"�c,�(F��*6( ��@ E��`т��[�,�T(���R�e@�Tm�fL`�(Ȁ` !�E�@�B�h��@F6�>��xT��x H�����-#�<F,h�"
��L��J�؀��O�|N�����
X#ik.�鶇�#m0�ɶӾB0&�X��G��=>��a2�X�a��O�zz%�f���l��Be���sJ �#m3���T#mSF�m"���˾�lɱ�)�~l��a���T҇Ѵ�B�ުi�[q K8\ � Z/�,�/, (A}�`P"
��� �,<��C�l�B��e��4zy �'���R�@����(D ���V�����%R����q�ZN�$�P�:Q�P�D��I�T[Ci�;_N�I#(����m�i;����f�T��J��BW�T�� ^� <�`�� �( _���ᲵQ�D�Pɲ0��X"���jEŃ%�"\d2"�@ġ2A�WȈ�,�nE��RK����X���Ň K*�#�J�(��Q�ƒ�!@�2"!P�
��Z�ʄ��pC����D ~P����'�������$BJ�����AY���]�� �ĂW ��4 .(�x�n.��nVHLU�Â�P.dQI�2)2)0U��}� �Ќ�%��*E���%�� ��EՀ�Qi� m.:Ј�ã�#��Ģu��1;�q1���E4���M���N�13��#&%X�G�#X�&XJ��X�:������,K�[?Rږ�>~i��'�Py��Q��`�A���6~<��%��6ad��M����L *m¶� �m��YBM�ii �z��ҧ'iga8bd0��~ ���* _���X�@4�,"R&�� �iyt%А�m�֍6L�f�!Bh��'���Xɣ��D VBe*"�J�V������i;(�J�V��P�)��P�&���)�D��[Ai��*S�#i:�KѴ��miG�����mL��n���2�5@��#˪@�I�*"�B�Ny�k>���}��>���M��-�s��6�C��,(E1�A��.�U�D��G� ����Xˊ.�!b����WJ�J��`�UeBB���F2��|�B*p�bD#`�|$HN& �� �
���Qa`� A� K8` �6 �FP��VA��>���R�42�d84`�DY�4�h*'*0H��p���'��*$�b�9ee����P�'KB��P"&�P`P1`�B"��P�*XTe���Ы����Z*(XXK<4��E��ؔ�T��o�[���������o�[����߀0�x}��@ beg�_����А ՙD��� KIz��ǛN���ͣl�dҔmhL����O>z}c���g��Z4��u�Mhu�M�v���C苌�R\`҄m�|M?Fځ����Лi<��b� U��
A
�մ��S�VMSJ���z�g������4!��€�� ���9�:��⡓�5&�E�M����E ǚ=6�
M��f�Dy �t%� X��Z(����JҴ����R���4̨Y;�[:U+i[H�o�i#h-����&�BEg����l���H�C���l)����~�yh��CT����^ ^�'yXj�� �"�@}hX����GpH�pѦ
e(����ˑ
<P3%*�`�C(Mp�u�eW*&]��B�����x����D�UJUPH>�)&$2� ��,�T�Cig
�e� `��\'������8P �,(ɴ�,�.T��B z) 8T!t�C$�`�ib���A�e%�e_,#p��<�><6�b�F��H��E� �}� EM4�GZx����H�bL!xmP�X K��n�[���u��n�[���u��n�[���u�ϭ��������� �0$�$� 2����Ȋ@ZYV|�h�(~m����,%Y����.�i��OO>zzh���d�T�mKG��&!.��ǧ�[N2]6��F��E���4]
t'��F >���6͙6�16�ӌB�a�����U)TQC��T���}Sp�t�G� ���̩ Ӊ��8��}A
S�X��NЉ�4D��c��B<Ѣ�(Hd3EF 4d��s�L�te ��>����-���Q� ��&����2�����i!D�nq���J�( >���z��ׯ^�z��ׯ^�z��ׯ^�z��ׯ^�z��ׯ^�z��ׯ^�u�b�>���Q�m�m�h����F���c����]���/��ԙ�hS�� NER�^L��'N�:���m:W\|W�V�g�X�"�1���}���efJN�"�"P��P�Xh�E��0TQuEF��!�@,EF�r�«`�h��H4 C�^*, e�B�`��pb3
� bhd �Q�d �@� gA����h\��X�(N��xP�0'Ⱦ �I������I���x*, I`��
iP��K�� E��,��*�iP�SE���d,���D. $��
9�@=���@�J
�� Ȩؠ#� 0D�m�C�$��'�n�Ѓ�+ir��)��S�����O������N���,H
� Y�p~8@�;�H F��q8VA���
VZ�³�E�\`�g�l���gͨN�8��t)�%e$����}+�Y.0&�m:VP˫*&~\`Ml��M�&]dm��K�?ig� �@0� �6͙@0�a�2p@��m�mQG�V�SG��y�M0��΁�C�D��fU��aȝc2�� �'(&�40h4��6<� �:�
 �F�2 DL��N"8����*8��2�n�Y L�JB��N(��ΤhĀ���*6�����>�6��Q�m��O���ʹ_����ґ���0*�2y�A����94��׃g�xJ�Ώ�㦟a�n����|Ē�̯5u��f�G�b%ZDD�aIȋĂ�M,�T�\��hYҢb��|�nU��2΍ F�BBR��Uʉ
�4���2P�p�����B-P�Ié�V8 K8d��`�,
…8��R`��o���&� ����I�ɮ.�,PK0�b��YP�<��g�ʆ�hx0,�`Г���i`س�Cr�bqF��Ԭ@(��X���4d��
,TȢ����P�\2�|�}P��
�-;)��>T����.T|D8Ȍ5.'2$ H5i?l�t��q�3��?y��L��i�>�jL�w�S8������~��,��u�O�q�4ώ�F��F�<����ˡ6ф�O�>0� ���N6�a��#��6`a��wՔT���i垫iB�_YJh K:#��"|�����j���&V1h��
LR ��p��j�/lMG���:��� �g��� Bu �'P�Bu�)(L�D�aK()�QL�F�2��̦u��D��F�4����Ai�GP�:t&�?6�yy����͵����UU�-+Kw�IAIQ�L�B�'N����}3�:Ժ��� �T��k5��a�ҵW /�W���`� ��M 2(T$Y\��.5Ƌ',!* �C�eF��P�Uʃ��4 ,Hd�-V�G��6�H���NP���&�M@H�J�@2�H K8!�f(� :��Xa�G
��h )0<�
'�1�j���,���&(L�K��@� ���b�\��哇���@ �%�,�2�g���T�JY�p��/�
6. �C���EBҡ��46,�ŁPP@X:
���`#�0�h��`�u0E� ؐ�Ň�x|�xF�����$�#�`���>�6ʹm�m@��\t���&T]"���,���&u�T]q��?yg�ɨ}C�U�Y):����'&&�����ѩ.��„%�(>2���
tG�F���'@0�יִ �JS�~�;��ۏ@ZZ�m�.�`7V#lr@��c�h�#'8�fPPO2q���4&X�&X�eA
 ��):��-�2u �@u���N!82�U%�)�L�Bj)L�&TS8�P�FE�6�a��-;�XF�aDm���h�������������+�i�F'}1�U�}��>��߸uZϜugL��4��
�2B�L�7~mg��Zl��ή�a�Յ XYa�ȉ
�,"*�QRD�D�$%+*&*�a0��C�^$<UAQ��"JN�6� �>RB���8 K8�l\�N�t�^0�%B
�G������w�aEcc�`5$�̢��Rc �2��?V2 �cJFB�� E�,�� KK��
I�ɸ.@.�A�Wʐ��*\��*�CB� � E�3A2�4m� N�|�lXD@.#�����A ^#XH�p����m}Bd�m����a#j*(XJ���H�)�GFL���QQP��u��>�FԸ��'�����Xua�*#'Ba��(qA�� �p>�am�P�#J/��g��VҦ�Y��m\��1��!��u�� $@��@����LG�18���6�� Ry��"e��[hu�$�) |�F[:����!:��#�!80t]�%"�M�LE% (�F�fR6�ԕ (m3�L(�������u��u�ʹ\`y�� �X��G-����Ҫ�iB[����򂤠(��@�;���V��O�:�����U�u� A��q*��rē$WT� ��'Z���Q$��"�ˑ&QbK+4L:D�h��`�Q��'#AҠܰ��a`3� ��Ƃr�c*6H1a���4 ���,$HRV�T�% ����%���N�ZY�H@��`� d q�b2b�PHʕ��
����X*$& ���� B����ؠ�Cb��TB2�d��B ��Là�h �1R�İƂA�V, K��H4l#`�D(��D�7* P��R�p0����10�Bpb�������sin#i#i#i5N���d�Z
" (�`�,8 �0,`�#J���B� K��HږQ8�����L��e�]HQ#iU�(����L�q3(>�
�+P�F�8��L�qK�(**YH҆ޛi:���0�2���h���@.�a��6�BU�P�=��*�4�
��}�m�@ZYΈ R�>��:4f��T=!$is#8щ��!>2�ʆ�"���& 2i�JHV4��b ���@��'P�2��DI�B���>�@�B��vѨF�ґF�)�m���eK��J�F�@Zx :��m�X��F�/?@����m������ZX�sJ\tⷝ<��gU՘V˦T���o���XPa�� �� 5�zmwW6�cO�X�+.q��:��#X��@E�(�`LT� �yPز��R�,�М����*l�h�fK'T"  �
Wh�q��0��|Cig8>\�2B%�8,y��@}baYg�"��#N��E��qG��
$,h�$�
h7hTPF��$Ƃu��\YѠ�:�dJZXLU£��$>J��Qq���d+tT����E�(�]�D%D0��F�P� ����l�pL# �&P�F��\#���D+����e��L�F��4��̟}EEK(�QD�
FѴ��L�qE+��QQR⊇БR�fQ8�����č+mCJP.<�
sjLR6h�hшR4�
�m�H H >�ϨV����HMSi�q�J -,�ՔFU�ԓ>����,d`u�
H[4���/�h�G@0����4���JБG2H�CJD�� X����>���'�mI)H�v� H��I藍Y#�OGm�է}K*\R��
� N��6��~^m��%��/?>�C������-,"�����}�N�ζ���V��[� o:��\ �m][̅��f�!k$Wqr$��7�:0��h�h�,Y��f �",D5"M`�D�U���*��)gJ�!�`#J�2�q0���R��l�N@�D�hH.@T> ��&Gig �f'�6�2 �!� ����<>�� 1�N���A�B �A��A��C* I�**�<((H�P��
���B��>�@�:�X)Q�hlX&* łq�cA0x ��ƃ���1 7���C�[ ��b�0���q�A9�BP�A�h���`L�L �>C��� D5 A<5�p��������ё������qK(�L㬢eE3)AAQu�YHҊ2j))�AAH�FБL��UQQHҗ2��,��qEEK)��i]�/մ���R6a�
F�0��!1V�C**V�������)�OѶ��R8����7��FFe���Gc����*��nt��F��i�2�) %L�GѬ�Ԋ�&e�-�!:���g�D����)�G>!F0��hO���,�q+*\H�l6�+
(i#m��Oi�F F�����m�mB<�ywϬm�����`-,B��Xl���8���k+0��e��_V��ꌪy��_3fiu�"���5bee��b�Ş`��6äOx��o�ybK�L��U��A�ؔ�hF4�|p]QRuʙ,�d�A!���H|)|`�q pl�*J��ZY�37>����)�B�aW����
�͌�JC@�#A���a�Ӂ��ua�K�L���(�RW� E��� ��������e��(��(�!�ѩaү0Ma��"��l`y��H\:2���w�!\QX�q�e@ �`-;)����j>k�Cx|1dF ��)U�����q:��8����������m%��L���~�K*((�@�
fQ2������q%!4�8���QD�F�
�&�
%�@0``�G0���E!��_��O}�e�mj)�8���@�+���u�j���>����*N�yI�δy���Pb�a¢��&�Z�J�WPB��GfT�P@��� i$����>�4'̣�UF�;H�GGGGm�u$[V��. Y#J@ZwT Hٶͩ8���wͶ}�mT��g?���U]���%Ӿ��.���Q)N�Զ�+ϑ}�����ڦҸ��u�b�,H�f�k5��`���N�"b�" �&2D��ZXablb��0��Ƞ�h#b��1��\��PX-,�(X(*��z.�l'@H `BR� 0�HT��@ZY��8��(HB ;�>J�"�ψ��eÁ9`5 �A�*FA�`5 �ō �ʁhTl�#�6**X@X
La�6��0t�tp�L2��NX��AS�A@x ��`��F��ãh�mX�1�\%�`�YP�DP�`� @*�����`-:@,���0�7@B�@!h'�C�P @�,�0] ��x��8 K�gPTS���N&q��D⊊����6���<К>�
�/߿~��R4���g8���N&a%)B�
wS2��̧"�
'@0b>ىƎ4�]#M����j�V҄
�Q@� �@ZY�!@���}�
�r�
� �<���ZBX�f�Rb����L������`�#� �}*�(
mhO���1�c��N�$ ���}J�YJ�z:v����QU H���� ��h�����h��
i��H����,��W0���+T���Vi�բ}��Y�O��{l���.2�~;y��(��&�nd���$���`�ʖ6E�$$H�&�q�l,(pQ��bl���,d�d6���Ұ�q�F�
!�ه+��T �h(t����8>D��Za�dd�`��}S�WtX5xdFT2�|�f4��jU£��$h�%�V(l��#DÁ�up��B��H|dH4�A)g�Á���|>\>�Fhm�h��<+,dY�s"� ,�c��,B,�tIi�O��L��`�Z��DA���0�qa�1ĨK�a��+�Am���e[o� �G#����� �mhr9�L!AAP����ߤh�m��68��)D��$}(�FE3(�L�wT(N�꓂���h����6.�a���ߣR��a�d�"~��m ��F�=z:��AB�B���a��&�:M c�(8`�4�Fe:���YJ�ŎNP6��I�>���1�K#B�
4(Чm14c*m�N��Һ�������}B�7�-;���� �l� Pp��I�D�U�����-,"���v�y�������P+L��|+m��R�@qʍ���d�:���_�W"P,(.ˋ(�Ig�&�f�K
�E���L+"U�сRn�& ���F
��p��� �hF�APD�F �l� a�H�9���d# � �`8�p�D�^��!�,
�~���$�@��,��e� �ŁPd(`�1 �HYQP��VT$,��FD2�pPl�9hl�tB ��������Xag�A�x�E� I2a14σ����#@�X"(�`��dX#*�Aք�0��0p( N�h�L P `�� дak��+��>�
�A��:(�#�����&S8�K���00���N��N6���߫i[o߿~�@�����A~���
r)�@�&RL�f8���R�Z��N4a ��,�e��u�������B�oն�V��x�
��|��I�8.e�Ѧ$�@2y�'U}��s���M�@0p����6�WӶ����,��RR"6�C�'�F��f�ь#F0�eK�h��&�􌦢}=;I�J�W6����ZwM�18��E�AA8ٲd ��8��o���X K���T y�̧e��VaY%d��uk>>���\]�3����8��M��}��i�%ڔY��,��e��}bka� VD�7��"�4$�H�d1$�0�<�xNR <tmXڡ��T0�Q !R@h�@ZYˀ��hM�ceK�u��`ȬTLU��A�#!�q���YqP�Y���)Q�� \��k�:(�GEV*$$�X Hń�� �ï`"C���6.����S�.*dQ�s"��4Y��ʾ,B:T��Ӳ� �6 Z�Z� G�Q�Gl����J�x K��(@���7��i#o�+i��m#u�}���߿}k�ߥ&�aem�0�����߿��)�D�R���Y-3��L�őJ��GI�Pq���߿P0���a���!�����R���������)q�b����ғ8��JB�
+ BX��1
�tb��
�ON�l�u=;�''ԣ�F.}�hQӔN�$(�&mHS(F�3i�N�WR0�Zje(ɨ&�U �m �t��GR]dm��Lʅ ! �0��&� 0$p0� ��D��� ���x��y����^� ���?��R�<R�<R�<���\{�Y���h�p��|H@R ��|q�T�6���nx�Lx��@D ́6$<�B�b�J *L�^�C��P��'R��U���"��;^T���$FF��S�T�VB��.d��8{n���Iϧ�P}������ځh��l�`���8ќP$P�H���('�ӠTZ��!������Qz ��T�Sn}S�_T�S��L���eaF 2&�|��F�"$��yx H���"6Xg���Ͳvvvvq�!\T����ioa_�վ����&T�gӺ��J�'����Tk!�\��6�瑮��jն��\JQCiL�&S�H�U/Ԋ�J�3(�H�gTTPPQ2�ċ(�V����IIN�gRS2��,��qh\??@�h�H�F2�����ӌ�|��;.��"WH(acN��d~9!p�#���B�� #��i�fȝX��;if]_���dA�h!X# �W�� 5p&
o@Z�--��W���`uH���C���X���"��@`Ӧ�N�t�"��Ѯ�Fes"#��R�Z5'F�
O)$ٕl+0�gN<�螾�⊏�æ�e���\���˜]� .�������mZ� ��t��KH@��$*F>����YP<��$
jD�*���d̨ ,�2P�`���/x *yP^��B�|,}�A뫺 .,�W}`|���(0�A�N J��ZXثg����6�ٷ�QP����iq"��]�����vS:�鈠�a3�H�G�+ECB��g_J�U��P�K.��*aE�TL�&S8����u�)T4��l�R��̢q:�)�L�fS8��ğ�L�J&S2���"e��H� �\B����:%�]@����M�3<��&f� �G�v�):� &���HYp�#� \���4����4��O�ri\�������D$ 1T A4&(Jx5L @[� AH�pM~�i`[�i��w{����3���#����|��@8�-<$B����@6a9���!t�K���3 P�R�������մM�R�Pb�e)�0��H��i[*H��˲ֽd�m]vX"L2d�JI ��K�LT�8Bm�R`�9t�)D�V��2G��Ay�n�@��DE!�����f�L
�&]!��{u�
���=���o+T�;I�.��Ko0���"��d �b�U(�D�*(Io�[���������o�[��ؿp�?�����X�ۇ�;@D���1����Z\H��Y[HȥN����7D�
GR.���n"Y
�'�@�+�T�$�*r/R�B� (i3��H�g8����V�dԊ�yS �EQQR��Ӳ�J�4�Jg3��))�IL�:
E����m���eHYEB�*5�8�Y���陥��fv]� �]Ó ����p�#����HYRBɆ�LN>l����-,k��������1��a�JD* �a0�(x)�#� ��5��Z��n�x�}���.:�yaӇ�<e� �`ѓl.�e��H>B�#���yԊ�V�*�϶ʃj�TqUQ��e%rI�0�'|�v ؞a�O^\� 2q���x[��i:��a95��D�A��&SD8��Jyu"%l((Y0n�d��j`�2ɂ�� T��.v� �a�����>�=Vˠ�ڰ����� .� �ȬD+e�A�P���������~�_������~�_������~�_��Չ/���2L���f�6ᖏ,h��G�"��U������]u�Ͼ��߸�k+aK*N�IFɶ��Tmd�6�v�T�k$m���B����iŠ�R�V���6��,�ˤU����$���um�T�e����k+���� (�GIL�7�I>�����~}c�d�&��2D�F�4Ѧ���d��ge�6��H�#XH���Y�a�NM8rd�����LD� Y�h}�3,X�bŋ,X�bŋ,X�bŋ,X�bŋ,X�bŋ,X�bŋ+�i��'��&4��(� @��� o
�8�y0<�Io��R,�Z��G�-3A��A�������t�D�@"8
�c� M�S(^@B�HB�䑗H#qC��i�m�$PeJEO6���"ˌ2�jR�•=ZMu�V_Ya�ɮ��FCą�5�u�#� ���9�arC ��0�/Lm@��&�P<eH`���(�L�4�m1��1��*�).����xu��@RU%xӊ����믁<����֯]�D �`�Qrˊ��.0U����k��_��������*�$����…�33;2�������,�GiaY�Z�������'E�,�996
�J.)(Qv���xUbϋ�E%Zibo�m���ěDEI�QŽ�`��&� &L��rRQVH���aeb��6QY%?��JUiAD�7�:�d "u��:��O��Ϭjjq�M�l��-�`��˸vm���Pa����QGp~?98�����>a�+#��GR����@Z_��� �ੰd���� �0�`K��
@O�#�C`-, ^�����N2B0>��p�����Ј����(�_< :��� ȃ�D !\�]�E�0���*(ۯR���/�qw >���>U��T�;y��1k�aaf\d8�Ć��K��u4d WJ>��E�,�y3 �i�@"<�����"����j@�*��
2)�
�i�j�� ��-Vʀ�S
A�j��.�<y����|6iw���<�]`x��|U��+B�����*�����<�A3��6��ξm�� ���Z�-.% 2(�FI:Nӥ�dQ�F�%*ૂ��,T��"��>Q���`Ue�"*M��$,Q��I�M�H��/�Yg �M198�����Ҥ�:�RM���d�_�WIL�'�H�E�,�d �"~~}c��d�&�750ɦ�K�@ѩwM�fm�3J�U�hN�tTG,:������,ry�$L�?��8�Q+�VD��>����R��85xT� �ĨN�A<� (A�-H1��iZ[�Q� O��[���
���c��8 #�����c���lq��#��tHq�c�@��}+����1�ąU�V6�#�)ԄΨV�JU�JeM^|f��8����j��W\�[��]SB䁣%��$�?u�� �хhG�.��px��F�"�� @@���(��`PHi"�M&�$XD@� �I��q+�FT�PQ2\(F�fӺ��>����bD�}�PmK����\�XUr��,�E�J�E -,
�d�����]!�U��d́�i#�^m����T�+
�E�q�WJ�,�UEb�
,(DQ�GEebҤ�tT�I9I���EJ��)(�6�(�^/'$��O>E�ykL���(���M���"�dS��)D�F�RQ�B���:���u�.���d�&�54�����6��H_;34��P���Ǘ8�QM�2m�,�l��T�`����:����}��$ �Z_��D�2��jU! \ ��7V�`Lp$P&~��R����`L��:>x�@=!�\�x����D @���>�"502(��l((�dŠ��*�2���T��][/����<.���.�ˬ�˄�y��
�T:U�CK�G��&GF:��u3ɇS.�J�dB$T�d.#�} n��0�B�C�& ���5CF�I8CR����d�b�Ԇ*U������|N�q2�,0��W��'~��h�rDB�DH�W� -,
�/������D��G�;6��͸uc�T����Z\ZVNU31fJ8*�h�� 0*��"ˊ�-XU�W_p�ťW')"��|�"��&ҲqE"�O�X��2˄⍓�pY�qF�d��(�DE�(�Q��AAAAIIAF���rqd�u (Y>��'\6����'=>D���36D����gԣa#(���EH�2)�]�_B�W�S,��˥�$q�L�Z`G���p�� ��"�& �� �H @/B����H@*�nҴ�&Q� Lˆ K0�t� �Y� H@�`,! B���&N��P�ll
��D �����P�$�nh ���t�Ґ��l}����T}�� ��䮫t��o*}���_�Y[�����$ �&d� �ۯ@;��s(@��F�2�ɋ�i��H&8���т%0�1BB�/Nm(*%4�4Li rs��Ul!��Q�+@��R8��O�����0ņ/}��Yv%Y"�H�&F� f�<��y� H��R$�������Տ8eI���.�g�0�� �@Z�-.%�'(�D��,�g�"5$.��1��U�:2��X���F��,D��W*�"M.,�FE��E�`Y�b"� �/X�^/h�^U�w�Y`U�H��Vs��O8����L�Y '�Y:���в~m�o�Pa�SS��t��V6D�cꏼ����a-��ED�5���tϡ]�^GF�7Ҽ���%�u�FR��� ��LD*j�4 ���@�,!3�B� c������à=
��M<>!p�'0��3=<�
O�p'8����D(_D�T||�1D(�>���w�y���j�%*����
�D;���^~]h}��-�F����"ef~��4�� �+ly:��@%@�@��鄩�R:�c�3�N��_N%� Ӻ؍+����J�q�:�.ueeݸeŞ.�ϐ�X�u�Z�׌>�ƖysK�0��'%i`U���� `�F���&d�y���d}*���� K��T�E"�fE���#M 0`\��Cq��gŖxa��� ,6�d��R(�FJ�M��
4,ȳ"�
4/`����VEY�d�U��ye���4DT�5�����,��L�q,�d��g]?B��~l��M6��N�zy��}��D�EѸ���o�"�to&��a �(@�GR��t���y2���GH�7`-/��2Bp� � `� h�R�j�"����0��8�t��|�0����=@?� l\/4��bh �N ρ����dj6�i�ȇ��N|��2
A�@��UiU�eiվ��A%�*�*|U�u��{ϯ��M��Ļd�e�2��bu蟁�9���)ď$ L �R4x7:
��Pm8)�:D�nl'HRҚJ
)ͧR��[l�jH�+u�q���y�N���u�ރ��e�υw�v�kWyfXK�^HX���R������¤.p����-�2A �duBcP�� K����x�"�̋�Yx`�ec �4.��Ck
�+,��"� �2������0)*HP��"�����^iQFK>T�������-,����Y�g E�(�R%,���m%3)��e%�U��X뇙:��%�K�:njmA��L2aX��
P���4 �y �YF�)D��Ьy�.�`��訖J�*g�Ҭ�����^��>0��A� A�R�R�����3b aX�N���������!ʆC�6 4�����A��΃#o�h'B�� PF�V�'AD�V|"u4BM ��T�U.�>��վ�y�Ս�p:�aѽ��]Z�.D5�3&i־��,��o�0��CɗD%<���(C䑅i�:Q:|2B�P�+ B6���P%P�X�]@�R� �:���_q��ߺ<��;�>�\r�z�$ ,��_\��2`���-,
�/���#�f�.ɖ���p�#��]�������Z\J8*�Gx���fE���YqwE�|ea�Y\b+|]ч��p8�}Xy����ARb�����<(��gJ�Y���|���QҲ���Y�J+x]�� +`Y�U�/��P�3�)�>�
� �i�L8&��p�CMh�F.L��@��<���!e� ��}��H�UѬy���yc�$y-�]H�E�.���`�h��l ��)� �
���.�(� @q�C�'�`���e������l�dq�Q>6h18
g�G�O �!l�Y���.  ��yV�}�C�3(���F�>�#R�Xꤪ@_���*Ը2��>��/.�}��qU��d�avYWh�"�B�{n��Nu8�:�"H R ������D��\��2@'J#!F*�Ctg�L�P�h�b�r(թuB�ζ�o+q3�>�����o}�j6�X���-00�0Iq�B��-,
�H�c����� \��1<��- � X�)� O���^,�Re^(�GJ2)&��"���|������\]������4�y��"|<�@�"tn,���|Q�Rb��|��ˊI�(�g���g�����.��⮍)1��P�g8���N ���X��]6�����Y77:��ЧH�6�<~�tK�]�@��W�~��t�!\�ȕ�$}���&�R�2�Ĭ�}=-#����fK���`�(R B�h�T� b �x�� ��������� ��d�66y�Cf惧�@ :����BC��*Q��D"}3B�@EH�PIH�0%�yX%�a�h�UA�U�լ�yŜ����E���#e��E��ma17J������L�C�Ne��O,xp�DgY>$tYBF�8f��DI�*.��yJ��(}@�w�qX��^!y��@���<��3�Gn2>����"�:D��0E� -,
�/���#��@��BFǙp�fZX��=i�����pY�Bd��dQb�
�/(Ⱥ„KK<(�g�� E^XnXeq��8�}P������D�G)pQ�B"�EU�|�Ţ��x^/�X��ť�|8�>Ȅ�y��l�fS8���$���h���:D�4zB�� Oϸ����]�D�
�����,�T���o�u=KʩB�g�=>�%�)H�BIh�N�:E��Z`X$,�n6pJp)`>�`%@��`��3����Z���80jO6�ƃ.  ���6#BT#J��>���"M
%*(�S�T&B���Hy(S�P6�#���gu��*���a�5,F��R@."�D�vHT���_��� ��i��D%<
Ȅg�:�#a��S���>�N�gR��d*(F�*@�
(��R������ʖT��v���R��t�Ϻ����j]]�2+��B���B..�[}���-,
�d�����y '�? �P]ï�`�#�R�����Z\EdeҎ`��(DR/�\T����t]�wê���<0��h��1��A��#�"B�����F�VU�gK>ZY�u�x�]Xۡ#XBD#�EˈH�_���0�rrbbb]c�L|��&]2ɹv�'B�(WICJ�E�:�tK�y+(�?@����O��O>��J0��~��o��d�
�\G?B�`-/�ag�ą� F����($����6``X�T�����������pJ��FͰxl����@!B�Fed!)���%(R���YP��(}�n�����T>�%%]�FP�`n�� �CI�7�|#}hNE�TI2��UQJ"I�K�&��8�o������tD��DY\ec�qՎ�՝ O��3L���N�WR<���>�v�T]R釕0�������'\|F��"ϼ>�g�a����e�"0�6(8�ˎ��P�\�������.��*<��Sl�|�&[Pz��iq',��`T��%��/�2(ؼ�]rύ.2�a`��o�.2�a�v��ȇ44�q���������C�Ċ,4��i8I
�]�� l9�|"p"dm`��L�J�4a��dĺ��92�ɧO(F�&Q���/ u%
������}#h\@�'�Y:����и��jQҲ���O�7:���~u��,�r������u�{���ZG��ZG���K�
H L2������ H� H� H�g}�`��� ����� U%R��Tm��7�P�
�M��(Ԇ� ���A;�*�8@��*��F�!(H�˪*�:��B����πD.�����h��A-��J���+�H��$�q׾G�in��p׻��w����Jw��Ÿ�����W[�u� ���6���i}v`-?�����Y&�J�Zw�,�e�e3�)i(�F����O#e+��T�5�6��.e 'H�`�&��<ѥ�>icSSK"�d��Ʀ���Z:�֌�ζx��֠-<�;i'^���� K{]�`y(��e�URyK�Ϫ"��K� m�#�WN<�d��Na�՗Sty:���j�j�CGojȸ<��s��2+>����� �.2�!�,�,���� �2K��ZwV����w -?���m&�]; J�j��0�t�$y#(�B�5�2�d��(��Z��ЦB��u�$N2x�'�M�6ə����Lζp��C<D�G<M �_D����Zy�f�N�y�`-,��Z��D��h�����R���uj<���R%-6�P<P�C�M�
�N�m��ی�u8-6q+*+U(��R�H':�A�� �:���"Fy�/���!R �"(E��X"���H�נ-//ؿ�%v"�^�2�������B {�.��ֽM��k��kݭ=Z�EZ���2���w�-?���4�d�$�u3���mt�&e+��F�&Q����l�"����}h<��h:�)��N�icl����|�&�:ى���O�iÍ�h��V31B��p�5�-%���ZX߮������O���LB�d��u�]<���P‚ )n��w��%])�8@��ī�$e ����Vl3R���C ��Vx!�x/yŃ'�`0yheep̒�CB���\2]�A�2_v��������:I�r�'�AQek���T������՟��`y����~f�+��+P�/0�.��b�� �yp�gV��Ë;Y���*˭i.]� K*�H O��êZH�W���t�&��yȘFM�U�"����R�JѬ��k#�l��\:�拺y�+h��&f33114ɉƏ8��i�N������h�'Z�������`��D А�h
r +�P�o� PX0�
Z�A�N��|=�! �|K�O>)�!��>�
`+�@X�\���"���à]8���pN��Vx��}�`x+|t/������>�� J�
����X�����c���i���a�"�K���'�s��JQ+�D�l��(
�B�z�*�����L�TJe(�i[T�U'�tR�ɐ:��o8���O,� ����I(Lk X�'�$��qe��^� K�:
�<�c��f�(�l�c�� D%H�� ��}�o<�6 �e��/�"DY�l�J�hT�)2�$���B��`�h�`��\�@���($X`B*5�"@ �Z���������PT�����N�w�SS,���k YǞ8�,����,ne�.2=ht��1ֈ_|���3.���>bbba�c���&|y��!d��;#��bbac @Z_����GդY-�爛p�����՝X���̞d��AAH�eiD�G��μ~����sD�Y;<��g�:���h�-&�+^�� �
����耡i1��&6�
�8���S T0�F����YP��dl� �� 6Ґ`J�Pv�d����@�K\R��`���k��Lj��E���,e�@eu��,,���� W}��iy&�P��AwS�Y8�1{�\�� ��f�$�\4p�.e�"Rn�'Y�Cd�dL�D�m*&\��&�0ܐ�a�Ptp"��@���±U��-2�$.@Z��Y4��]3��MMJ�'�.����|���p���8��̬]�;���:��F.Ȟ8���F&&&%�2���ɗ�4<�yyyyx��Ë�8bbb�:D�3�#}+��hW>��GY��]c�|���8��f'�99F�$��EBL� �H�wSR�y� �d��/�d�'�Em$��[���:�@ �������B���5J]+
��U'V�2����!&�9D'D
HP�PmHtƒ
$0�� %yZe@\8��.(pΨR��]��:��>vY�Ȯ`�hY�*�h�EYy��}נ-/�L��j����6ʃi���1UI����&R�`PZ����ʜ*E�@}X�E
��%]pB������� $,�@d �@�Nj"ɀ�mM���Q0xyx O���*��d�&���e+��>�OO�;9FE�8���L�<��1ք��ZX�� &9118� ����ǚ�]b 8^]�;"h��� ̺bb�u��Vic33 ��h����ɵ�2i� ;`��G4B�E0��C��6%pH��>���Z0� W6�׏,"$4( ��˸a��`-&��-,!��J9i��� )‰N%Y!�/�e[��Q�B#BD��[� ��J������D�L �lS,�+V���[�p!8�ac���>�=yg���V�,D �X ,��±��/2�+(���`-/!�eԅ���^���r�6�6+]��R��$�>����� �����K$���*����vX�ʅ�үe&t\1*XP�#@� �`ұ��u�-2�� �� O���*���R�>��t�$e3��X�#�(@L���p��#���0D����&&&6���E�� V>8ȝ�� �C!|�}�*�̸bb�m��x�ƞ8��D
K�i���X��778�#�,��vDrk \(<��y��!$q�kx����#!y�g �2�t�W�z҄
���e����up�`+��M�����V�rSi�jP��* P� )B'F�V ��V "���_Ha�H�LD��Bm�!qJ���8���<�K�R���x���af_$M�I�.M��E &�����:���Z\�8ӞR�P�S���R�D�q���hR�Q�xE՝>�3ͼ��,��$Dd�b�g
-.�X@, E����`Kh"��FT�aր�P5�p8�Al�� ���@��������Z��@��<�d,�l���>�ϸ�����Y3Λ�p��&�78��M,vffb�cL�X���&%�/1/// d���B� ��'6L�+V^�}���d�&fd.)2P~r:���A��2�ࠝ�,����8��Pq�� 6B��_.��#쏲a�+�\��_6���N�#�"/i6Wia�b ����� ��q��� T�bGT#?D#J�*��U��H��a�����H�q ^�䁊G����6u�a�l�N��BT��¡���� Y�{d�0I2�TD0a�ay&I��`!
.�݀����S�P��"] 0�aX"R��-������
�x[d,|�����,�H�}��QA@�L�@x(��V(��Al\/xTD(�T � �1��A���U0t�����L4��ˣT��S�P2�ӳ����Y-���2ṩ���N�Δ0���p��&/0D�>� t��}��bu� �t��6�ڂ�����$d��%� (A X���Ĭ�����K�(�c���"(��,���$pӂe���Y!Jm�� �J@�}��b���7>�8�8� Y:#���+vҸ?�4�� O��~ �A�N �'})�@���rH����O>��Z}�J ��y���$��x��7қH�c��uJ�RV�Օ�N
IӺ��U��_s��+>Il �ج�D�H�Vd�0>i�$I��^������!*:P-��H�!�@sLq0����Bl�����N�L}(B� "}���:��.P�F����x&U�Rb@-E�"΋��.��B�Z �!�M ��!�a��@Ze �z�����Q+@�S���P2}��3��6y� �e��|�ˆX556陷 �}�3+p��Y4����ID�:(�GGGGB�:O�2��M6a��L@Z`8y�l�.�����bfĮ�2"��f��G���Ra� _G�qQ;�W�10����
���>� va�ʑ�~�a�P�dIi6Wia!�6v���� $�M��u8��)ĩ�L#@��հ��Rψ�̆FV6#�i�J'q(b�䡂� �]��[����.�������X}��ϱ�"��,�"Y����d ��?v��'$t�e8?N�P|���] :L��[TI(+Z
�,��8� �P�q`v������H�/
*-b���
������!x�ca�������C�!���U8��`-?���eHXHE�@��yc��d��G(6��&]4�v�He�!h�*HH��l��@�%"��H�E�<�䏣�y�����GF� �//i�0����DžK�@���냬��>؝(�$pD�jD4����Ģba�/lD���EDQD�nȎ@�E�0� c�� dzi��,�d� I��o@ZT����i�_z������ �
��,"R�.�'N]00 D��u\�uCjӼ� �<l12 (�+B@�J�p*�H�+��m�^L�n�f�jҺ��n�q5���}��}e��\Y�����,���`��W�{�`-.@A���� lqP}�(�����R���&)Ǒ���2eu�_�p�$J.l�+��I���E P"h�DL C)b�D `�H4�0 $2 �҇�(:�e�<���u�8 L�q������,���JE#��@�'h�p��[:�Ɇ�>]b�.lˣ�8'h��h]IF�*J5�,��t�'�Y+�GF�9�м���/�] ��h��GIi� X}����p�����&<��bfĤ�P�`�X1pH��v�6�x�"��(��F�jЕ���˸]�R���fY|���'�>��l���<v �-?��xhQQuO� J�Q*"It � �O�ʗT=T|�A70���}(CR�P��J�ּ@��WL*�a��8����xu�/�,�y|u��"�ˬ��+�G��Z^A��f�����T�X�9mv�y���h����|Q�C�Aw�� �����
�X97��B%Ap]Pp+x�@,��?X`,|d ��.��BA!V ����Ze[!j����R���&iI:���>vu󯜘(?!d~^e��hu����<�� �y��F�GQ�,�t�'�]"��F�>���N�} (V@�:'�.��� K� Æ:����,%pq���o��'dD�oG ���5d1H"��DPѰ�Xl�7p5P$�GՏ�B� d3.�Vmcs���N~�� I��`-+�N� �������@��p +F�����e��C�d���J}��*ҤJH� Mvl12��QB�N�*N��<�=y��uS� �N<귂��t����j^ae�K2��4D��2I�z�K�]�~����= �8pD�m�&d��+P�ДJi(�Y�l.�ށF�C�Zh
��.����Tliq���Pp�`f2��HY1P�h Ѡ�8�d<: ��
∀#���i�> `-?��R,�}d��$q�V<�ٷ,]Ë�X��/2�}�� �]#�h�D�7�:��T�#}"��OOOP�VR,���
Ю��N�Y�44tttp�uf�3�&"&tq��� ��,"���#p�#d7����Ր��1>"|7XECwXnȑ��g���`Æ/:���H�|�h߀��+���� !������F
) P±��c� Ь�5F�ѵ�M�L\�Xnh3H�A���+y��L*~���>>���^t�����
���+e�=؝j�v+�������l}��iy(<�"�OH �< � �:Z0XCD ��� /tY�A�€A0��)��\�}�C �T�<�+�+$:��0 ),p8�< �ʃ�hpP\-LFA�i�L!j�����P���u�P��Y�g�:��Q�m�N���|�#iH�::E�:�d�#]'���???>�%о����V}���] _>��+=>��\@�����M,@���E�� ���7Č�T�[,&h7�� ��!�1p6"� �>"�����vCV�V�w��#̉ԏ&dԻ��Y:��yy�=i �d{ ��@@@ �@@ � @ @�  � @�����a/��^���>������������������������������������_��������d���?>������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?��ˋ����*`�#�a�rr r� � $�J(�J(��(��,��0� 0� 4� 0�M8� 8�N4Ӎ4�N<�4�8�A�<�8��@��?�<�=��C��A@�;=A=��������AC��84@�49�����<�@;C�?C��?C�?C�$?C�C�?C�>C�?C�<C�$?@C�;;�@<C�;C����C�A��P��P���%��9����� ���P�9�%���A�����@?C�?C�4?C�D? C��<C��?C�$<C��� P��P������������%���ÐC��?�d>C�$<C�4?
?��?
C��?C��?C�T?C�D?C��?@C�?C��?XC��?C��?C��?C�$?��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$>C�$?C�����MŐ�e�������P��������=����P����=����ƐA�������C�?C�#�P?��C�$?C�>C�?C��=C�?C��=AA�?�C�?�=C�C�$;C�t?C��?C�?!C��@;AA��;C�;C�>C�<C�T?C��?@���AP�����������C�?C��?C�;A���P�@<A<C�������A��=8��<C��<�A�@�A�@�58��ӎ��=�4�8��@��@�N8� 4�L0� 0� 0� 0� 0� ,��,��,��(��$�I$�$� �� q�q�q�a�a�TW����P����� @WG���[�NTH���ΰ�n��q�=+�im;(H�V� �{l�R��q��[n��^V�2�uL�\��e̗*E *�����
�H�r�(4PT�-.:\x��p���P�� �������� �t��<@Y���@aИ@� �8N �p �@,����P��(
���tx| `1@"���"F���(,&� ��$2S!8��J:ѐ�\Pd&��@2 t82Q��d����� I�
ؠ``�d�8���t�- ����W �A�����e�k��\T0�hT
�b�.��b�t,:`t �0 ���%� �+�� ��� ��%A`�@;��6�<| ���"�������0��G�7�X��ƛi�l����N2��;�����W�IM�m�˒�8��HKi��Gȓ���ERQ��*�f�HYKi #.�:2���m>�w�i��}�іF�u��HӲ�.�&��e�4D�4 `�H 4�� i�A�h�D����Fm3 �Uit���=!D�QED�&�(�f�=)t#M!4��HM2�78�tJ��m*�H��6��WwQ��Z��@����tt+�q:S�����
��Dȓdo�F��"m� ��[]�e^@��I͸���Sqh���M�\��T�������j��t�V��.�RUE�:U��+(L*����.�M�Q�pL��Q���@��eѥBWF�x��wBhN�N�m-��s�!I��Y��z ���.#2PP|f2>/ Tt�uH�0�P�R$lQQD��<(���d�," R\����!�L��2F(��������a����\��� E�4lӢ��K��EM�%��췅e��Y���(!lF�dG�|�->YDu���}��$���F��щ�4���fAA8X}S�1m���A8X�����N"i���4� �8&m mU{Η"i�*��oh�B��H���F�*P 4���b��������&�f���biWNQ���d�d�[,� FFYd #h�c� �4��M#e�"ȋ&4�����Ӎ.ʔJP �%>��ȍ"BN�#IZL�V����,6���%,��t�CF�B���D�a�!����*#d�D,��J�SG�Ab�:t�pO����Lu�H��}�'�x5zw�m����ۏJ�,6��&T�=�i�������թ��;.$_.X(�eD�ULPTYPxT`�uEʇ���UU�
�0�Q�Q ���˙. 2P`P !�`\dGZA%p��#`zB`.��p�p�h�H
�8V(�� E���Р\�dLM 6*q ���� �*�����à�h��:����|e�Ќt@: �XtXxX.)E�a�ł!�Y ����l0 ���� *d4XK'���B1`zh8,�q�0�>A�r\����� pz�
e
��PxhJHx� =h��ɉ@W_�M$i��'KP[i�e��e��=�A",J� ��0���Xe��ђSC��8֐�+e����w� e���F����,�0���`�Oa6�,�Hj���z���fڀ���])F��T��I�jq���6� -���a 3F�2Ɇ�ц4͖0�Ɯiu�iv\@�4F�4��T�ϗBe�HM!4�a ����F�7F�#i
$Mb��b���rY�2�' uTL��� 4i�����!,�2̐���^�ȝP��Y��y"l��ǒ>��yֈ�G�I*�F���v����ң��\���1yRr��T��ʪ����<a)S��EP�F^&|����uё��FS�B�BW�5 � ���.���<u����
l�r1E���<UtPF.ࠌ��B1�#"1��FU%����.L.��0���T� �0,�d%��Ņ�(8Fa����a���BE!x��B�0�#LP�Y�Ħ����L�3�'1E]�o�o���P S�ai Q�*d��Lp��"E�����0m���(#�V@e�/{�j�{�TzŊ
��L��� �a�A}�SHp��[i�� j��}T��^�2�t�%m��4Ț�D0�M� a�j�^��}�͉�V��� �<��3�L���*�ie� P0��2� Q����2�
eS0���"6��M",�ʂɭ.���Ӎ.�H�dL�D�%S'CCJ�2��%i �Wetk��Rɞ��֗b����WwY4He�$�r�J%q%��4�0�L ����Sv��TH� ��LL�W�(i�/P�ou瞉�fQ�q�� �����iL 8���;k�\Լ�Ҫ��R�K�M1Qr�9q��%L*TI`MT¡0���Q�P�LdP �拄��B��h!a�`F4c@�(�� � `�8�LT��;E]fp��a���\t���`�"��J�
�����1@��# ��� p�d����ѐ, "��\8$��HH:���аF"�v,6(� ��Ȱp���/��-X`@�:�2��� ��P�P4�F@�,�h�pTC"�hh@`�5q(
��͹���,��#��Sǁ`| �`��%�#>�A
l|��u�Ƙ2<��ߣ,��=e�M�{�ժ��ނB&m�(!,<�q��c�@�@�
2SGh�vPF�B��籫�� b�g�i��h���.��,0�����&0ћ�|u��j���1��2�e!*HӠB��3hɐ[,�M���4m3FYtƓl�f0����{K��j�R�P}��Ъ��$'�JY )d���%,��R��=)d�WJY�)i�,=��+����� ��<�Ү�ƍ8Y!*(?��� +�BY*'�L�Ae[ {��>���6�#�{ǟx���OY�'�/���~���,=�<�QWK���R\|�˒z�UT�S���*�a@��5%P�R(���Q��ˣ��RP4�Ӄn �*8ᅇ �WY�
1��ۤ�L ��� ED�bn��
�&tt��B��%��td�룧F^(x������>,���>,��b��t0B0��e��KV$ZP���&�T�b� �h軦��,e�qQiP}8�
��x:�XA�9�X����8y� �>l���W_Β�T���δ�[��PG��t��/{�j�{
�<�LNy
vzA2!2T,=�
m�:�F�K4�)��%2¾؛HZq�\i1T�Yi��e��#(8��{꿸&��yF`+�쾫m �u��8Yƍ�f�IAda��i����0�2��0�H�DYAdƔit�P�k.'zeR�,��V�R�MJY)d�iK%,��Ҵ�{.2�R̸�ĭ%e;�Ub�wu�IM,J�TJQ1T��6� p����B�
��H;Ly��i�XP���q���/U����h�U�^
�{�;�)k�����k�,&T]WUYPO.h���PR.2]A�� x\�T%�"TT��Q�q Q� .>`.*���d��@��N2�%���pA���LlLl��4#� ~�WY�$@F(��t�l� ����K ���ȸl]8�0 ���� �H��c+���p�QI��p>�[���,,:*.PPpT��sP�N0 ���GB�n� a�!��F4T�p�x�p�&B!p��p���Wv�n@���@i g�'�����G�'���'�����i��4D&���&�`�c�4i����b=@�(#�T,\i!bQ�&�X�b�Ka���4��g7q�L�&�e a��4ț��H�M'j�f 0�i��׽]�����]gm���U�V)C(l���e�( h�6�{,3d�&��eT�0��# ��iCH��a52�8�D�
����狥.��/CB�����ҧJ�w�a=��q���4�T��p� �2H
�茩��-�Ҩ�DU3�@� N�0�_����!,㬦#l��M��F�Y���2��,�&>��OY����?||���\BW*����G�ʈK�0>]��e�\��A#��L0��@T��C�*�â�K,]�L�T���*�+�+�*����(Tr �����`΀ʬTI!Vk�<�e�"�r1���N:|u8���I�V0l]R�#�*����!.����XQ����Ś�*`��� ԍ�� 
������*h��̟��P�@
H
��x8�F ��"<T�!�I�Ϻ�F}A�l����Q��^t�� 0�R �"i�$�N���Lo~�d�b�ySl1z�:X}���1b�K��Hѱ��6�S��:o@�Hq� 6�0�w*P���.�Y1Te��k�c]�
�[&�)}b�ݸ��ˣ&da��a� �i�,Ѵ� ��h˨Me (QPYAd�S��zW��w����QB��,P�JY ����Bi)d�КB0��ZBY�"i��]"�H�Rx
��2C��<��L��,0�� 0e� ����M�
��NTH�����"d ��F�F�7����d<�W���H��,�츢��Ѯ',���e�D�+�TX���x\�P�S%DF��q��`.6`$.6T��P\T�p
����\���b��LИō��qgF�x�>�(�L`�`| �L'6�7@WY��c���\%TQ`
��"��`uu��# @��@y�Q�=b(
�*��D:�`#.���2�t$0ʆ�DX`TL@Y�� �a�@+����&0��N��pP��D$�a�0ł2�V*�  ���l��C���h$4! h0 <��pN����m���9���p Áӊ ��pH>B� dĈ��cɠ+��0ђ�0��Hp�"�M56h�M@�,ZaΖ�HX�q�*.4Ѥ
���?:��HX���:Y� �2����!H�t�4h��a���L�g8�v�'(�O,h�����O�5]i~�6��X��gD��V˲�2FY��e�Y�ifF4ɦjF�v˦a3�PYCMMe�[R��Omt�J(���'J�V��¬=
�hiZB�ѕCB�T�Vb����F�ct�S.��bgZ@��f��,�%������� d ���eY��!k*^n�Z����lB�1���p>��Av=R��g�j��*����D
��wK�˼��r
��X�|��A��.�R!w�0�s��tT��ˠy��-����jC
�p�Н8F���O]gN5��'KX� �.��m֋�t��E��
���6����O,2|����:8��AŃ(L,0�qaV\0��U0��Q
,,H.�`FiA�QŃ$���IF� �!����0ҁB#/2He�H�FH����G]�o5�!�c���B<N�a��� F�b�����4hݦ�6�V$E����$M$i�,X�T� X��a�F��lN���'i� a��K5:�@�CgC,u9��0���nHl� aƓ.�t��,�w%Z,�T��z��-]ke��v��uK�@��FpM�F�6����&���m&@��# �2���m;� &a��R�������Om�LY3(��J����,!a �&� ���y碰�B�=1�
���SvL�B� �,q�a���4� ����S]a)FXet�2 ��dI���C)^�`��6\z��K�z�u�O{��S\MYa%@ܪ��T�
�U��EAXP\�e�e�K�\dPˌ.$hHJ��L\0\ �F\.0 �4&".�X0`.�]qP`*��? (�8l�e�`���D 0!���*F$`�8X���*(Xрl���P�!��� ���B����B!���pã�2#0��B�%�
�d0L`0�e�"�e���l'T�D$EP��A� �X!-*�q �QQ���90x�F4Dd�!�0݀vې0 p�h �U'��)���y�@���Dqu��4n��0�F��a#LH�i�M����LX�bt��� X�c�,Ĉ�M0��hѶ4� i������I a�I �i�ClHHm@�e�,�w+��bƋw��iW�&�����R����:���T"鎰0�t 1j͋,#ifM2i3� L�u ��2�u�PY��*��;�SӴN�#H�L� )t&�Bi)d# K%,��H��T�QR8�tk$,�x
���8���7:X�L0t���6�1���Q]b�YY�e�ef����V�g��U��k6 g�$������>�<���j�"j�J�*!*�Q����p�yq���yQr�����t��C$�%��<U�� �a��L�A�C+ :4$�l0���$ �9]gL%c@����"�Lu4�uVu w8,���p�d�i����� �tI ��T�0Xa
��FU��L<�32�MR�ˉ
.hزq�a�� "D�P�h� ⡒@���q8��1�sE���\Rj���j
G�DΏ�H�$Βt��Ae�@W_Ͱ�cv��$h�b&�4�~u��$,l����,X��,X�,>�LX�aV)HX�a�L0i�4� Hl�a��&B�ٓ�� $6�  R`Ӆ�a��T.�̳ ����}U�mp���v^�e�����buR��R���J��}�ʹ؛e�a�m2i��YCL��QPY�d
v��V[iJ��ޝ���u�
�B��OJ�d��L�f��L�a4��T4��{N5j�P��s�O�}í�,� 0�C4nѯ����7`+��D�@�d�`�c���<�D�#�SD���m3)މ�����q׶��kU��]y�Ģw�TH��Pʢ��.0\6\`�%G�q��2T"*,T U�L��|����pA�Ap����626P�GL
����E��t6CiW@�Ap��� @hx*�EE*�;@D� ��D�FO��@/��4 E��6�@��d$dt"0 *�b�Y �� � �p ���l�� � �"�e�(�ؘ1.:8���@:�h8P�pPA�a�&��B@\(2ll XX68l�p���Tq(
���܀[��!�2#9VL�LI�)"&�'D�8���nҤ�jn��16-",u��4i
�E�ӱH�*�i�,X�.?#e�f�?6Í1���M0x2��f�`�aƎ�"iJv'IN�Hj���� X`�]Ƙa��*�hӅ�T�uj��N�KPֶ�ޫ��e�q��D�i�\,Q;� ?U��4�g�a��}�ުjf0��nݨ��U5;�m�'i���Di)d̥N���(zbɋ�.���b�-���L�UU���� �]�7HY#)H��lHl�d�������� d ����a�J���@������-�dA]��K6"l�`��`���Eǯ*"R������t�U��K������"� 0�B2�J�R$H3"0T� �d��eI�V0��C�ʊ� F�N� ����� C.���+���c,8� �B�+.�0Ş�����C����HF(��#��R�*��6|aA�%�Jiф�J��,����^*��X��ac�č�\L�V,pӣ���Y�� �Zpe�*�2� �*���췐�����By�1�uO�m
'�@�V`+���RɳM*n��IYJX��7�.l���L$,tL�Ub�#LO �δt��~>�����N4l�,6��L 6i*sf�5� 8� 0e a!�`�@Í0�@Í0d˫kz���R��B�u%��C]hU�}׊42��5J�v���u_m��F�e�4�O���v����,�����]:�����l�N��L.��Di�#I�&,����j��hNӊ\R���]%Ơ+��D�4�s��4���!B�G�Ha�������)������c̔DJ�'"6ʭ�l[Lݶ^
e�i� m�u�`�׬�&.,�R�����UPV.*U¢��D��qB� �qQ� � B�%�*h�P\хʆA�p�wL���h�FE��qt��E��2EB =26A2p��6�L'����$t3�**$�z��q�EŁ��ap�4td#0\\% ��F ���# ��� �acS�Ck��XT�PtUaQ�R"�B�B��`�t�`�pz(��P"�ԕ ��B@�(> ��lHp00J*4B�[]�$m��2�?�A����"
��� TN�"D@���e(�&����i����S�h�N4t�Iؑ�"i
�K� T�? �H�J�B�Ɖ� y���8����q�f����d�gM� �7R��-0�0�; 0e�ChP� 5Hl��a� '4���^T�c*��]Z�U����kݾ��RYP�뭳�4Z�M���p�,>Ҭ�}�o�YBt�2�k&]��r�.Ӎ�Me��2ۋ�q2vZL�&e �P�fS4��ZF��v�n�d�&]:
��OL�j��B�RHl�d�v:i�����
��D���l���4b���c�����<Bݑj�h�ï��p��a��X��d|�ʐ��!*�p�Q2����R`|��Ɋ�0NU8�1��%.�q��‘rb��60�����,�i@И�˩4Tm�m���`+��Ęw[t�I@ b�e�=@��N:���,��Ba�D�.�Ҙl�C���\�Qb�� �� ,]�%���B\�tFF+H,��8�@�0㣧>|n0|ap��j4�!R:�0��feϙTˀ
�@Wv[�d �##<��3ʓ��(|�FHY�����0��Ͱx0��DŽ��JҒ�G�u��R � �a
�= ���l�NxL�E�� y͡q�c'�RX�`���,u��Ά�m� �’�0�.���@t���6�� $%HmZ�jիp��^�թ/]jU��}���RQH�L$,�0�f�e2͖{�lM�O������ꭴ�®8����T��]�.8Ȓ;%ь#2���ZnݵQ�n�d�4&��Y�5 �U� +�� $,ū !`�F�a ���a�I ��2���`XThC` r�1���v>`@�8�TO^�<�tx�����.�v_���s�����+���WG����� 0 p����:�� ������H�4�>|�p��*$#Df��2`x���i���LN�>��� �H��i1�H�Hȁ*G��^P����.�I�!A +�
��ʊ�"� ���d\ϩ{���T|�Vx
#���7·�Aд��д�(t鶃��dt-��@&�D�
�L�R'>��d fQ4H�F����^��:�U�� �T��T�uOA2����D�ਪ㪊�]`R��Ej���AD��:�c�0"lB\��b�Ř ����W\UpNf8�Y�U&��T��T�����f8��q�FU4�^6��u��ZT�c3+�*2񲃢c��1ƇE�P~���A�FDƜ#N�B팸,0�d��%?�iTt��NM��K%���.L�ץ]"��D���ttJ�F��P��� �� �y����Xp��.~É�.}��uî�\���Ç����������0"0�l �O�@���u�x
����`*B!������:�8~|6}c��ϪN�z@^��s
��,|�� ,�#j�&QP RY�UN T��������TJ-��%W���7D��MH�1X_�����0t�b`vzx�GV:��t(:�FYLH�fDi�6@���:��R��k$I�4@�W��!u��:�A�RB�א^���P��J�*���!t��gV���)�?���
��m���a���*��NG@"����W\K�aI� 60(*����fffff.���qq��8�ۃ1��c1��K��.3��iq��K� � <7hr70�Ґ�p���H8&dң��$ �\3��^��ʜ,K%��9%��d����j:E��D�%(�&u�:٤m�WF�!q ��~}T??H� ���,Ç�:���W?:���ϼ��vE�"�EB �2 A��@c�9���BJ`.  ���������� @� �8&X>
'A ��h��T�����O���DJ� 鉒)`x�
���HJ� H�*�'��JSh�ϦN�J@Z6��{����R���.]p�D�*.T�qqE�B��{����`L8.p+<��I:�BӠQ���Dq�r��eSd�B�UZe 2�S�AA:������q�ouC����1����O{�v��N���a07��*���@�TT���/]`R�(�����'�'�� ��', xv8!��W�+�%���Gt�ʦT������y�ʣ1xニ�Bꍸ6��fi���80�Ӄ� 81,R4�a��7!�Cj���� �\1hp��`�����8�
'��t���u�$�.}���GGH�;-�U
�蔠��T���>�B�
T�����~~~~��8Ç�~}�ށVa�
��������!4P0 x@d@�j(��¼w���� �&�6̈́�D@�P�8|6}����>����2�T�$ ϔD �u-ID$U J���P RZɭ�8��=UK�����;t�� �X�0*��ĬT
������<�a )RP��rpzuc�Q;h��8�eY%L��ɖJF�t�4����Y2�q N�'u8����,��B·�t>Q�C�VRR��?�x�����%U(<$���<������tm0�&�PN�l�}p��}�(
��u�Yc ��a�1x�NY�g�����T^i�N ./h��n �3\i��ۃ- Ɣ�86�i�}����F\\Z0�m�s.Tq��1�G 8�¡uƗs��=�Bȗ>����N*K&q
��k#�Y%2���"�*��ys��]��*�D+���z�T���&*l��Ϫ}S�`��>��O�r��h�@`
�fK���>N��@`�pp� 0
��Eր���?����' ��.!A���M>@�� �"���$���R����R�"DQ$FH�:�
��D��)�a�Dѵ,���6��� ���Kb�W\TH\HX�\LTL�Qq@�\l���{�[�g��`��Ӏg%��S`ܜ ����J"'J�8�2cɄ,�B�S���@�2��<d�(fR2m�m&P�9�������:]�/m�<-�{�5�X��9� T��
�X4XȤu�J������U �J�,���X��,|��P��� w���.��ʦb�
,YaX��0��]Q� �32���� .3hf6��c1ƆK�e���q����# ��,�vţ ���5*4�p�]����#O��'b��N U���'l����%Y%"��Q�"���(��J!(x���.y�� �z � z
�POϽ�AA>��O�~��\>�+�z �@W`E]0#2��*��� �LJ �@��$E]a^����l5䡒R���
�c��HF�)`q��`6�|8����
�H��27Ԋ�Ȟ�'J�e
� Ӻ�4���Ŕ�t%{�Ak�T'R��XN$�`^$�L�TL��&
�-��<�������dBf²t� �zciUFm*���Vd�E���J�R��ά�@���=��ʴ"ugDN,���� RQ������$^&>Ua1⊔Ya�� +�
yO���
���D� ��<��,>�w���.� �pY���.����P*X��p�a�3 �.aqxۃ1����.6��anj�,H4�>����cj��Wx��-����N4�а�CEB��$R4�����b�s�N��y9DN#u%+��L��U DtER*�VaV9A@�͠��q
�(([>�
�\�H�Y#�d�8�
P�<��PPP@W`<�p�s�pP�eG@�p �|�0� E.��+���]���@3�A A��A���Cˆ�P��2$���T�I�D>x��"R��0.�qBt��@���D�%���i3`>(L�U�y��VV�/Y��xnԊ �`T\��EJ�p��ˊ��}O�q���� �F D�ܔ�2t��)ī2q02Lu+��� �d�'R�rShĒ�#�Q�q���z���Bd���G 6��Iu�R�^˕��Dʁ��b��.P��K:(2Z���NQ_����'<�Ю�y�]�x�28
��u�����p�aqa"�
,*ࢃ33331w��4eSM�pf6��mq��%�1.p�P�C�,�TuI���� *R6�Q�#m F��.8�iq����ذ� ��)'l��ޅTK0�'XU�
�BQ�EQ)aV>���6yéϕ>U�O8��ys˜�q��D˓8ys�q�����QS!�/ F���q���|4��#Ƞ+�+�W��3�F#y(@B� ���(�7� �z }*�A
g�&T�iC�.% Q�F Q����PZ�F�d�& �P�8〽3����r��%U�Bg����u޸.tT'(��N��� ������xx����bD!�(IRR�#u!
!$������
UQ�%(�B��>����l<۬�S�6�Qb�JtB��{ԇ�N-
�aiGJET�
J8&�\<YR��<������N>T��yvAac��$����W\E�3xà �0�ۂ��6,謰����&fU4Pf0�ʣM8i����2ْ��*0�ӆWT˃K�4h��e�%G1�da�W(e��Ş4����ؠ�b�N���6���k&]%���P=���R¬*§�<��Ϊ|���6��'Ԡ{��d��� �h�bY�y��8rryrb�'�<�����р����h���A0��.� �%h�̀�WV��Z�0�u���� Ft�������$��f' Q��0j��0� ��, !@P�%�1:P�)20���B�O�6O�%m+�6���$hF�U R��ަ�"��\PH���QҢ��LYp�c"�8z����-�� � N0<
 "�!hɒ���H�"$LtGR���8�:JN�a"r�� ���S�R ���;��(���"t���� #���;�R���*���Q�C�\�`���H
��5�+W����ɗ<���4vyIƘ{N�]!,w���.陘�Ӄ� �R2PQ�Uń�Ef30�Æ�*4��E�����.0�% <�fW2���WRep�#j���#q����<`Li�.�T��J�\��?���X�\���B���J�
�(,X�{
�B����ԝU���*u��@���(�}s˞\��I��b�s���P*��S�g':\�|�ǟ\򓯀����2T�ZeQа1 6���h�$� +�+�W�� ��RFX�'#T�/%x�%"2t.��(ތ0��B � P�J�]m�C�T�ҩF%��zp���\R�L����h$z�ԕxm�xOu`�H��R�����,(x������X�: (BL~��"��(��#��h�4#eJq������@��>�T!��C�Ul<�8�:��,�,iWCՖ�� [YХ:���CʉB�T�
�..�HB(��u�O)�������d���;>���(^��
��u��fc�FU\l��s"B���:,��ŔpʣJ�*4���.eQx�^iq�M8a�4����#N .0��Q��]sg�TZe��C-�LE�h��#�b���d��H����K�q�%�S8��%�T�S����8��ؠy��I�'\�GK�.vr}�
�Ru�Z>�+ϮFٹג����'*u���{ U��W_��,:`H�Fd ��ma�= �p
����*�ҀJ�3��+���]�����i����J �&$�`6DrpxlR.�� "#D�Rt XFm "Pё%U)�@���.�8�#2u-Jv���Cj\i�.4҅�iH
[z���%bk.T
���0&��(X��{�� ����p)&P!h��4eQ"�Dh�HJ��'h�ĉK$��##B ) �e)2KN��̡P��5T%N
��I��XQW[}:f�⫁�a5�Yr�i(��A�@O,6(ࡒ��*r����Ϯ}í�*vx��)AD�����]qt��3�85(R34(*ႆ"��\Q@��6i��L�..�*�\^e���&�1Tґ�L�4��� 0�� �aS�#sl���T�\��\�\�O�b}s�,n�Ƭ�IHY�J'.��t���p��띓�}ôaS�l�D뛝�;'\�S��'>��䋝h��G�'(}�u��@���ϸʼn�����B��.�F���6!��a
��@%�@WXW������PL��D���8l̈́D�X #zP�5Q���0B�JP�UQ�Ъ� J��u)�$�B4/JR�a�] ��ڐ���Q��UV Vz�2�t�pI���� �IQ/��¦���I�HQ :���%�"U!"'SH�b���]V�Tab'�Ѹ�y9D�֭JP,�*q��:�Z�'A��R[(�P㫅k6T-�(*��X��A��B%����)�?���'�;>�'ggg�>������W\L6*ч �\�]Q�ƣJ���,(���΋,]qFEb�T^/��ʢ�N �0��L�0�e&\2�� 14�%L�4�ӆW1hb1y��"�1��K�p�f(���e�IH�'X�q%�X�'p�S����bv}ruδnu�"��\���777'p�c�͖:�:�l*}ssrw��U��#�
��B0��N6�< @l���
��$�%� 0�⋭]���
x � `����04��dd`���B�`-ͅԈF�u)2Pv��@� �
��D��(Z��P�O%J�(ӡd�:E M�l��ԥP�JG��9�T�����T��B�F� \H�`|P����{�=p 3���N$��|y� �O`D�
��@l�� �RT��!P"А�Hh�Jy8Z��@P�d:��!t�'N�@
��J㎉:�J7���l�D�듮(����UUThL0*xX4( Z���Mb����м� ��
���\���h]i�
��uĪB��������F�x�AGEtY�E�,�M�� 8/�ŗ��82ѥ�S�̔(a���4es+�LM2.��c�xӃ��h��� *a_�b�I���IL�u��]3�Q.��ĥ�.�v,I�>�;�ʝy�����h�*x�2r"�m<��/B�uɤ�N��#:X���K l��4�ⓅO���+] K*\<e�DN����x!t6! �'�E]a^����� F���p!:����H<�LL�����GR��.�dch�"e:P�W�U8>��B��'m8F�fA��IA�7BT�Rڐ�MHF����H�P�UJ�bk �� �D�����IC䭡'>�c�6|�l:��2�%Y �D!�K0ad�j�J�p�*��U(P�d����:��k�B�p���v�Jpr낁@���"j•UR��*T\:�Ġ+�
yO����!�δu�<��gg�bŋL@W�+�"jETÆU2�à �.f6P�.������b�GE*)�E�3T^/4��a��� <���LL�es.\i�.�40����a�EL<��W0����Bw �F�jwS��N2�[��y� �:�'�>��ϸN���^N���my�3�$HJ,?�G��P#,F� �"1��$".qva狒�8T������W_� P.a8�L0 #(А��(8`������ � ��ր���Ƹtp5OΨ6���L�:��h�TNT�ZtҒ%(��/FF�f��,�H�'�D�8��,����>�!2���ԁU�.������/T�@��T��F($Ub�������ľ��� �`܌0D� � �l|>}V�G��`�%�#F�"T ���
��h@֔�9t����u*�N�y� �� 8��u�@��u
�*p&T�N�%WtH�f��R�VZ&8(��qwE�� +�
T�����Nq��\��|���(zz}v�����W\WlÆfU3p�a�1��c�XV+R*���Q�U��TY� ���ƞ6�� �4��fa��y�D̸4���*�p�a�ך*0ɖ�)�*eI����K"zEҽ�
�e�K�HY狝��vyS�1>��O*u�Z8���o6&N*N�*�Qb ��g�(F&A8���ARd$RQb13�4��p�1bG䋓5]
E�:4!X`-(
�(J �Y�?]a^�����'��8�"8��FN�@����1�N�Ξ .�u��=�6���d4��Bԡ��P)R�!ed�+��ԇ*]]m��Լ"(�p�����
�k.]��r����h����O�>��#�"#av��>B� �5�#U� ��´e�)h„���d��pt�΃�P�R�p��ppӮ�Ge�\(uPz�P��������У���<����L�ˆ=a�� \�C�%q �����
눒c1fL.a�O\qq�ƣP�l���e��p�QaW\XYS*a�e&bˋ)�lYqx�b�x��ˉLL*b.��&"�w��lT���ˋ�/���B�B�
�Y إ{�"]�X�e���h
�*x��
�\��ד*p�1c��\�RW ���M@���e�$��4B�b2�ʼn�\���x�1bi+�m5]�{���]Z�<��� W����#��ǿ��ր��-]Z�<�,p5�R��HӅi��:B݂4` HHQTd�@v&%h!@u * �1�����$
S'vq��N���މJu Q�P�
��HqJ7ZP��w*����,�R�|��Ae���K((%�{��@W\�&O�f8�B@"< �i@J]#A5�R3��P8ڔ��P�CMʊ�L��A�1� C���#a�@\��1��l ��l�l ���1�8h:�A8���\��/@Wb�I�@W��At�R��JP����N�u�ʥ]�ON:U�4��L�gR�"�UF�G�z5P�,yry<�O'���&T�S��}� �Y��P.u�˜y�"w�T���+��6&@��q����� ��燡艑�!�P�:\4.у���L*� C��L-p=����B��0����b'�b9���D���R���;]a��$�����06��#PQ0�Q$"o`����FF�IyTa�n"%F�'�.��e���sn:��6��
�\)� \(�(v�X��)R�
�(!U� ,�x���(��@�UD��
��:@�)B
h@
(g�4���Jm����%�]0��JR��UKn��A5�%wJ�IE�(m��.��$
��.�\G�i�#��:��)��0 �S�€ˁt� ǵ`+��C������eJ5Q*�Ǘ=D�P�.��#EO<���zE =3��J��j�R��TtK0��I����瞀�<�u����Y���çV:��Ӯ�(qI��܀���4B�
���?�"p���>�Q��:F��I
l�bV�
�.N�;d%����.W
�B����2!�) TE!y���l⬱]6u������P�$w����8(4
L��0���VFJ�2bfA�ciD���R8��`��R��Pt��B��p8�e[H�(6��'� JS�*�Gҝ+�:��Ku�R�E�9r��Y`6,P�� ��˕t��_��׀$у�b�@��s�a�D"#�9 B�V�F�YC �2��2���j^��T����((R$,$�$,&dXl�
@�\MP� ��R��!�Fp\�|҆��t G�tL4�qX
��0�w����L�%�Ϭt��Y
��H,�I
�@�;��L�UKeK+��Y%%"��GD���<�����(}I4�q�C<� � ��z}� �:���r��"�.#*B�tLA
� ���n��8N��I�6�4��Ԓ%\�B9�m��G��‚�Q@�����:X,\-\D��JI:���*��g`+� �''�����% $HU ��Dh�JD��f�*�����K$i3GT=��HmD��)l�B�(Y8�j�!Qp@�W�P�Q���C�u��TBQ��UUP�Ղҕë,T:%-��W^A8�r fH�8&�> : � IԶ �e@X͠v�F��L(u�A⫪ VtH�tH�* ����
��Q�J ���%��H8�0�H�A�a�� �5`+��A w����D�7�Q�zX(��5(�Y��ĘU �Ҫ���ކ�V))D�
XY�XX��'���T*}d0���Jt맧���:yrw�p��׀���c�4F��Z�ZX**���g�X��e']'*N�#dr)3d�H�r%����U6P��Ʉ��*�b"�!您�����mӰ� ��;]6u��WT���>� � �H
���/0@ Ȅ��n���ɒ�����ʔ��n���T$ɂ����bt��)2Eғ$q2p#�J��B6�S�NL�f�r�iJ�(U�[a���uMe�Y‚K ���F*Qab�e(\�\H������� �pzNb@rDX������N�0�F����H�H��2�=�S��=U@NV**$,\�,L*6( ���0 ��� �l
a0F�6�^�/Aq�� �D@c��@Wd��2����l�FX]��B�'�u�*�U��+0�M��(�ŇP�B�*J�yt0��,A8�<��u�A==aV9<��N8zu秬:zNP��]>�u��RH""�ˈa�$�<��Ǔ<�LۧJTۦ�&�X��ӓӫ�X�BUM��Ν�X�@��`�tLB���q��e� ��8���S ���;]a�^��0���<�Y�4K#�(���R�"(��%���q#I �.��"��=!GR�,�}��'zqwTU���8 q�*^�B����*�-UR��ްv�C���UaIP��K���1S`�N�� �
P�Ȓ��BP��R�Zn,�+iJ�x��t��uP����k�*
ʅ%�
�����`6��É�xl�+��FX&#���q'Հ�ʲ2HZ����PLQ*�D�*%щ�Q�T
�z[K�Y�(�R�J5�.�JI�P8�s��R�S��Ъyc�>��
PN.t���y秧�C=&�pꓥ`+���\B�B%I�X����<�瓪J���� �#y�S��T�S��(H��*N��I�%RN����s��p���ʐ��8L�,@WM�|upC��t�@W��pZ~D Ղh�(3HL�tdHA�"D��22u���t�I
&:��8�� ����Ѩ��ӔP�@%6��\iHԨp����JwUX�@6.&�U�r˔t��@J\�W���]xDF ����LJғ$:� IDiVi#`N��"��4v�'*�N�u�LT�@(,$Yp'JJd4`hLЙqP���`�e(l�M��7� 6�D����:'HՀ�ʧ'-]������Tj��Y"�މ2"�T$D$Җ]L��j�����u!F(�ac͢X��T�P�ǝa�Ub~}�]��<T��T����u
��aI��������.AN�A>����P��t�bS���#h�L�G6��I�NXۇ����\@�:�&�6P��g��*}��8� b�%i!�
鳰���&@W����� X]�4��!DQ0� ё"(���ɏ&zbteP�"(�F��"J�$I���y=8��S�۸Qp@�Ԉ���r���uHZQe�ҏT,V�ug�^P@U���_�����0)�ғ��UB$(��BѪ�"D
��x,�2pl��u�uUbK, �z�ܤ�:2ᐠ���໢�Y�F�dh�\C�� �2�p���� xa��V�*|'@W���Y2� �u�O�*��*�zeR�"�^�de,��ѕED�%Ѭ��s�!��y�I�=�PϺys� p����'t�M&�N8��Jm �:�h
�����S��pړj��ۤ�%Ǖ�m�(�D��X��k�����aE$��'�<�)�άL��NC���S���H&p��2H
���}�� ������j���˻]f;����A���9 iIR����L�d>���P2y�r���A�'S>�����"h�p�H�rd-�'L�.��(��p:�B� �p}Bu)�yEW�UeO�Xp��PC**$4%�{��@W\�m���LD<x!������մ @�l�(T}�!�'KL벲�Dē
..���<�`� ��&.X��F@��[����\� �{ @ � -����?>��/W� ��� Ǖ�������*�d�L,}S͞p�gW@�#�J�7Q��J:2��GD�*W�u �VC@����9<��@�����D�(yReM�M&�O�M:���6��,@W`���t�ӒwN6BP�@��䥇�<z"T�9�a���%y rF�*<��͓6P���!h�N����:�p� ��Å�
2H�1�
鳰�lh��+���� �S�����,��#��,R�2�cl��2jRd$�*�#/LH���*��(ȅ:̇�,�<ۯ7pyʑ��ͽ�.T���]P��� VTL>Qe�"N ��<S��Sh�:�T�:D� j���UYI]@
HWt�N�h������VT�u`j��0nUH�7�eA��#hӣAh¢��Pp�(���B`jX4N�j�WeI��,j�����GH�5Q� �R�cʡi!D�n�zE�*����K#]��$Y"��Ua�8�;�],����@�7@���8�Ë�I\&y����>��ر]��:$xH���8�3�k�ɜ%h�X�L��*q��Q荒!b��%,"yC�Y b K�F��ʜ�(rq��>�a�"������w�]6u���s�Z�Y��W������5<D#`!m)����̽2�����@>�7`y
��&ɏ&Y)Ġ���D�:��Gzv�EK��*A9Ɣ��3����"�N�'�)�\��WY8��0R,�q��{�+�QN�B|
���@��Y�T�L4N�ćӁ$�7��`dU�K,Yp2 ,�����*h�C�P(L"�L��A4h�) �����\Bp$�`-IB@Ç�@"`+��3h +����f^��VB�%O���^��d��zJWR*�d�#�R��t�F�7�u*�*�p��('(\D�TT*��T�瓠]�ӎ*M&�p���.}:KP���NP�μ�g^F��I�&\���)bg�%,=Tz=�H!,=�� \��B�"d�=�XUذ���'��>\D�"F +���WXD@%��W��� �)ד��R������ɴ�ĩ�IU�V'��*���D,��J��*�@�u��2mh}�T�[U����)z�ꂎ�Y]8T��TU�0������.".��1E���ב���:T�<`L�<F�@z�t �-8;L�`Vh��M�.
� AUV��Ie�u� C.
�AR���i(Єac+ ��\`  ����-B P=�`+��G|w���2��(�!R�t�I\f���"U!DeP���Va�T�R�}c�1@��듸rqS���NM�qRw��F�:��w�N�>�'�.p��ζqîq'����1@�:�^u�^tL��2���6X�D��ĥ�ԏG�6����T�q���m��"�'"h��W�y��6t���`�fG�%�m��:�t���]R �nr`�z��M���  ��f8 < ��H���z��(����S��%8� @�"��):C)N&� �GBJ�)h�b鎦#P�@ �i�%mf�2�%)��뎬��:���J�-r�A��D� �Ć
����]rABrp���I>:`�B��<6��a
#��K��N�U���T�P��� (LTp� ����'�A �q��A(�CA � ��J4�0���(x� �@ 
�LvI�L@W��кXR�Jj5S)L�b��F�5(ʢ{0����Y���E�=8���*N�:�gg'9998��H��#��"9*�y��=�s�O�:�<��x��
���'p��rb�7�B�}Q��Ț!N#\��9Q�����D\~>�A��r2"��"T�RE$���E6���g%�DX�rc��g`+�&�+̠����� ٣�G�Dm��>�d�R*������y2�ǐ�����LD�`�3Ѕi�F#� *�+QPT�R���P P�;SxV�c��]P��.�tP<(�@��B�|u�@xT��*�)B�������$��҂�WQ&�p6���r��n *�x(����(��dU@�52��j0��h4��;T�7\h�) C-��`��D�����j�WeZ4��
����>��uF\fʩl���
#�u�,.�d+$] ������I�*N����ד.L��k�p��#D������{"�T�C͞Ru��\��v�:�a2w ����6X��12 �E�T��D��~F�}Q�G�"(6?TF���4�L�$l���m��Sr'��H�;�@P��8�3$�`+�ξ��O��p1�
���'�C�� Q� S$*��6HF�M)*@RFH�T(�U�j"T+�6�
4�Ѭ���Q�>���u e K�B�׺� WD����$)YUV\�X��`5�]aQr�{�+�n8���M�*t-:C`����
P#R�2Q2�H(D��Հ�:��YH
��kEÉ&&hh$PT#Xh��;�a�&Ah�#��ud
A�G������?�9A���U�+]���as�R=*�S�*͛*�KH�5P�����N�d�����瞟T�ⓊO*vp��ל���J&F�3�ː͸LP�θÄꓼ�ÈW99A8���@W`8��N�H�"����? �H!�a��������JH$&OG� �  G�@��
�*@���*nN���q�D�,"p@�F�t��
� �
�'�+���lDY
%��J�c�^��DFЪ����hތFè�l*�}"�D�BB�0�:�.��U8R�E�1E풩A�+4]uPt��R��a��(R���e���� ���X&���]y"&\�>BT�;<��fN��U:��Qac����$���LiC`�*�M�PU*���a%�<]R��R`�!e�APj��]H�:lh+p.! ) �� �>d
B0VՀ�ʩj������e��N�dtK#U"��D�:::*B��BQ��=��=hC>Q �g^JT�m��6X���䥉�%NqRf͸H�Y3���S���L�3��m�������\���&��[#y�"H"����Q >�*, �Py� D C �G��G�A T�RH��O&�Nм��P,pT��� +��@/c{> ��@@�@��
� ����H�@�������@@@@ �h����P�y�i����(��eu��q��!B�
Me���ض����}���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������]������߭7��c^�|�Q�q�r rrI$�I$�I$��(��(��,��,��,��0�M4� 4�N8� 4�O8��5�4Ӎ8��4�@��8�@��A;�A���<A;A�A���@@;C��@����?<;AC�=C�<C� ��;=A�C�?C�4��P�O���AŐ<? C�4>A?A;C���P�P��??�@��<C��A����@���������m����A���}���P��y���]�O� P�U��P����C��C�$?�D?%C�?%@=?���?��?C��?C�<C��?C��?C��? ?�?C��?C�4<C�4?C�?C�d=C��?&C�d?C��?7C��?C��?C�4?JC�4?
C�4?���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������??��C���?��?
C�D?C�d?C�D?C��?!C�T?C�?C�?C�?C��? C��?C�;C���?��?=C���5���;<��O�P?��C�?%C�t?C��@;@����C��?#C��?C�?C��?C�?
C�c�C�?C�?
C�?C�?C�3�C�=�P�<C�=@;?�4?@P�� �������A?C�;AC��A�=;�C��C��A�A@�=�� @��=�=���8�A�<��@���<��<��@��<�N�P<�8�4��4Ӎ4��8ӌ0�L0� 0� 0�L0� 0� 0��,��(��(�J(�J$� $� �� ��a�q�a�a�w����J��)E)E'��O��2��h΢
����ǃh��F�3HУ
�#y�#�L�3L��6�d�XYQ�+ ���@*V.LDX�0+&p��U�.�����X>\�.:d:�j\h��E��@\�Ȉ�!��.2E�%�C��$R���4`��?����(��0� (�� (�� (�� ��p� 0 *HH���2�xh�i`E�рÁ(p�`��2`\��d",x\$(�B\E8..�!�8h .�� _ �B�冋!���%���q1�`�.����D F�����Fb�]���bdFC ,�� �D�[i�8,8Y3P � ��P �V�<H@5GB�L8&D�C���GQ@Q_�0@�(#,��J�0it��0F���9$����H�#,W�42F� R%���<���4a ) Xq��#6h���I# B6���9�����3Bis��B6� �� 3&˟ye�t�%�(]b�f�֝T��zZ�2�s Ѯ����:u��L�3/����}2͹���'NI����T�۲�W#i �8���j�����eQ��fK%U#� "$��6�@QwP�^�ˮF�P,���${X`����,��$J�Q")�2&�&i�50������0LQ�D�L&ra+څ�(�Z.ڢ5��ӸF�-,L�`L�0��W K *X..��tł����
�XPZXt�e�Ld��"�d�:e�E�V�"��P�@�4.# �L<h< L@QY��9���M�UT`5����8�AQ��. �hh���(F�J"N]9t�%���]9v�)D-�JlUifE�FY���,|X����DE�Q�b�'�*�G���4H��b���F�S�`�RɀZ������@j$
�:��h/8��y��!�ȃI��Q_͕#Hhe�#,�) �m���XR��P�aë�N�9e��ucK�XRY��]�X��F�6��,X�0@�'M8�:Å(�&� 0È,���Wf��'Y�id&�] g]&�����rˬ�0V������f�:v�ޢ����3ʠ ;d�3���^���{��}����2�����e:�4��Ҳ��&EiT�j�vVi��&r,�ժ�.���"UL4V��×�eq��FUs .m�2�ʮ������OEa(J iH�4���)�6}�ТȓF�0%&@���#�d�zfYdz(��z�����뮀�22�� �1bh�,�J&..\h� L�,6X��ˢ,. ��J\"2�e� ̈K�X!&d4᥃�x�C@�4!P��faDPVu� ��Y��` d�*���l˯$U�xT,`8`8 ��@�8�hF� �A1B4|�HM)��B�\#&���t"���N�YAa�� �q`ذ��г� ���@�EAx���\<�B���@, ���DJd&2p�Bd��`y3P@��$� '#�S��$-��"�DDl��t����`���+�X�)&�
Q�ew�2:��'H����h��Xx凰���sIchͬ:�Xp����
�`�e�\�e�4@2�cf�@`�/@�K�����i�KI�뮖\�����.�h
+@��uN6�$I^�r_v�4r$l�etoF��o�]�f,�^���s���fR�N�T�Ҳ��$��2�J����]��zw�rzzz��cꤡz�W����2Ň *A@���l�d���Wq�$��������h�D%m�h��TF8��H��/LL�`��=�����)��Z�U
�=Q���W�
�(X.&�`��e��ɗ�� �Ke�2�NX0.�q9vˏp��y���.�+��l�q�P�A���"�* �`6��PZ���Π#2>�e�i�l署m�N���&�da��k�!2|�"$COd�chƖ.��qC�N�b�L4d]�� dU(�"�,�YB�K�U…�� `4P��� �Q� �U�m�T�v �2H���E�M��h$ ¢��p���X;8#=8#ED�U,���̛F���aFL
V#e����BXua3�zoaƌ�^�t��X�KG"gGQ��^F�� Bɱ�4f���NYw�� yT) ��`���YzF��4� �,���],��Qκ��(���a
%��m���i�v�h������]���F����&e2ϦY2Ͻ��}���N�juR���e���zFP���B����ܞ���ޝ���df���e�]����4`��.h��H@[����=�
*�2��'Lj�(�#!Fm�2递F�aJc��F�c�Ѽ d�=5%3�4�#P��T��"�s�����F˙&�s%�Ra��'e�� &2B��K�3!���!�D́��B4�!!sE�"��L#, C�� XFC��@(lF �B��0DA ��� p"�"@� �T� #�=)xȰ�Q�J��| �A�p ��1��A��
S ���#�`��qF.v���b��i�����Å�b��Xh�T6* �L ��� ���0u��`/ ��\@�" ���pb6d#2��#� (�@Q&j8�� B@H�$A�$!9�ID<��"4BD��Q_ͣY!�F]��N��YB��,�6����]b8�l�m
åM.�رa�MGQ�du�,�0��F]s�aëM�@t�ck/a�1��BYq� ��au̽:FW&�E�Ld�"�]uԆz������&7߻��e����3���2a1VL�e3/���{���1d�^�W�2���L�uS��"e�,��v��"� !:���FR2���۷J�v��ex
.�r�,8��� yƦ�`�� ����������� Ҳ�L��G��/M:$F�0Z�邶J�-zW�/L��W�"m���A-� x�pT�"aIg,�l�\YB�B�.�� I�\.2����e���2&2ْ-�Ph��CfƦN '$��(,h�e6�PVt���#<e�ެ���Z&��OLH��A��N\��#'��F]�&K"x�.�]���M(�R�.�UJ2,L�"Ʌҋ��r�B��c������h���Sa��3�i��4�6�p��K@]E�M�6$�# ���f�:iV�!d�`(��4�åP�FX�v#�� 0m�l�Q��y��z�O�F�5X��U����D�*�X��<��M.����K F�d�0�����as���뮅"�K3BYs�F�Ld���eK��JvS��g@Q[\��~�Km2���������i�����{���%����NM��:t��U;I�N�v�};G�%Y�tK�Fݷ6��{v��O�a!�
.�i(Kew��6���H54t�#�����S�QXJ�:1��&>��P=C���鞍
`PF�D Ӽ/i�v��T�7�*�%U�Ϻ �,��ŕr��KK�Ա�h�I��ad��&AXȀ�"�# �X 2ِ��92Nd� F�h�c!)��>"@x24��L �`��h��QYӂ0 p36����$�#�l������Q$��4J"�������!چA���4&"숄#D������L#Q`ȹ��E�DXl�� �62,, 0 C��0\& ���`�6��|i��f44 �"�����j �it 4'q�@P�x'4U��pJFy3k�����0��V#H�������Xт1U΢L|��^��hIb�����e�4�i)x�.\d�SF\уl�0�!�W0�����0�<��as���������뮀} �Wd�g0X�r��&��I�,��k@QZ�I����L��K4�b�m2���i��in��e}���2G�L繧�U}��zD����̟Y�c-��}��}���&�3tu �5��Ň�,A6ȥ!�G����,��#$�F����0�$a[-�@��;O!L���ny��4��eT�BS\�#(� -T/qP��bayf� K'.<Y���8��FG��,8Y�G ̎��H4D]��e�,%�ê"�+A���ᡐ�@�X6����fN�)2e-�s�z�h��[*��a�a��](�]8Æ�2���6!�p�A�/�����
r��4M���lY9t��J]9D�pi(¥R�0��A"p�a��� �N4��8l�b̀#�E�M�����1������҄!I�H���l+l�pW�K�0@�F �����a!�hӢL�Жb�%���I(�IF��'f��%#�'<�#н"K�u�&�`��F���4��BH�]v]v]uΡH��+ Y��d�$Ѩ�.�yFI�s��Em|�c ����겫*�����ʬ�������sLߴΫ/r�o~���$���Y{�a�E�����e��^���r6M�m�NbFT�&��<L�ܻ����%On��K�(J6p�����h�4�vA�D H�0�I#L���w��[�n���,���w]=QUL�*�L���� � �K�!��^, 2���7K�L� ��`�� ]2�!)�1 �C ,����Q�E �P�(J �P0�C`D����50Q�n6�Ef,\� �1�^2
�ĖPP���O{ņFFA�ȸhp������,C���&Ah��L!�pZ.�6A6 �d:��D�B�xX<](��pbT6\ c��p�A�ذ��@L�`^�hH��.  L�U ��2 �������)��8e3P ` �`v�#p����9�G8)<��(��Q�E]Ǝ�4`��%M= �d #&��Q&BY��4�@�J��F�J�دb��$CB�!T �&�9�,0@� ! 4�$!�^��s�e�H:����뮹��fFRY�κ���%�&�E�&�RPVv��0L�u��z�E�ci�U�VU��*���/��+��+�n{L�'�i���X�f5����w=EI٤3E�h�Eͤb�ͬ��)0m�՘�*8����X
+L,F���2t��$���$LB��HS��M��7�!�8���٨��9�S�o��j���*F��U,���B�b�,).�#�T2<]凋<��y��3"s-��44hj6p�e�a) ���F��CB�L��
+;��3]P�"I��6���yd�* �2PaQ��KU2"XD�h��fJ L��Qy��-\!hB�B�BT�j�(�v��.�U �]��-l��b� (!pFPD�q���Cn&�� C��<�P�]���b��&Q��.� CI�D� � J#Kn��h����:�u�D��D��i��ޑ�;�v뮧e�ZY T�i)��J��d��9� Q�
���X2�� F�����&�:� �at�Y̮�t,�κ��sɥ,���K+Epx���}E~���s�0��쬺�\��F���s���6N��M9��ڭ2���e�&ˤ�&��s�:�:�+�ex
.�d�{ �jm�l�a &�#,)H�����S�QXJ�Q�i�N�0,�"di�#�e+IѼIL����^��K ����R�6�(��]Uk�(�^�e\�eA\��������XB]C"# v2!,�p��Q.!.ɐ^4�Z2 F¡�fe� �ȰJ ��� �% ���:�%AH����n�ΰ`.̘�)Q��
�����=;�T�Ȱ�l�0�H6�@�6� ��7&. L�����u� �!� �#bCB��N.6\�`�w ɒ.&���Aq���q��:.ѷ C$�@�4�� �&��8>\#,%Nh
.��C�49�8����@;�i^q!�!�9DQ�(�㬑�����Oe��Uw9֊�,&x����^��]B��K,Ws]�=���$�%�H��)d�6M6�\���8�y����]� �de%�׮2�’�I�R��F�V�U��Z�β��*�ΔW��UeY���c�U�>�h������h��:�Β'}�s���[Q��),a�R�I5�{��u�#l�s�(���:��+�q�X]� #HjŇ�����QX�c�ѣ4�:A�ךL�Ǔ#�y4é���{"d���[���s\�TJ�X�⒇ViU�r�ʖ*�yq� �� �ˉ '2(H4F4���!�#*�!Pl�H�i`�a�p�b��0d<�B24�v��X��P�BB�(\`�76I��8X�4��2H *fYQ��eF�.LDX�r� �4L<�yPځ�A�yQ CJ��X�uV.�beT&*H��9e��  6�q�A��U �4H"��,��a�C�cm��Rb���Fa����@�d���LNp-9<&H�������L��@�iÇR G�{���/^��r��wv�ZXRY!�=�Q'd�)e�02†�4��Hh�њ�e4,�,Ʉ��e{&,��ԔX�e*d�U$�
��uU����c�*[Y���UeFM&L��ʲ.�4������˪�R�T�5��s�.�r��$�V�4M�r�$I�k)(ʑS
T��z�m�%Q�.��s�(��BY��&��:��b5�0��h�,D����*{pU�e @�Ly1D��&H���xɑ#a��$�"4 '�F�ߥ��.��'�+UPNX�ĺɖZQe@�T�@ʫ,ꌕ��&@�23!��e�#@d��6 �a���q��`�l C@��11�0��d�A��PB�� P> l�Ef�P �`/@`
�XaP `>�bE�ɍ d ���0p�h*4 �d%��AD (`B\����â���t<�T<* ����B�Ĩd���Be��eA�.� D��0&��A��h#�t%�hK�� ]0�.�U4��R��2f�`49A`$���
����4���iA�#��N�H
+��*�������)F��9:�&�N���{����&X{��4v�X`�͓@��ȓ�s.@��Ck0h��\��� *�m�L'e
� 2a��&X�Ō
�&T��l�QRdܪ�V�V����&���VJ4�^�,��,�a�9VV0�V]UeK:Mgn����$�&��IR�T�E q5�*�9Ĥ��8�Ĥ��eG��Rd�h��H.9E�NX�,R5��Xu�JB��i?���X
+L��i�=:2$ʦL��S=0�J����&{�~�b���ӵf��ӪAU��X��� ��Q�QʚT��\1 ��B����v��#iF͍� *6D5"3.2��q�Ȩh�J,!E�'��F�1Eh4 � /Z*d�b�����8X����ꈓEF�2.4X�a�F��.*\���zʼn���m�UT\��B�©��E��P��ҖLYau
�*����U�Щ �@��J�yb�� 82l�˴��
.�m��:�9�X��d����̠N�b�ME@�Q��Ȥ�6�ބ��d,ߡ,)*8�3�"h�r9�G#�Ț9]�=��{KH����W%.�:"l�@Y3��MX\�SkY#��] (VH�^�a��2Q�����HQaQ����(�OT��2�9Oh��QrJ�e�d�
�Y��U�l���b��],a�]$�G�iRE%Q� *L��*�NU�^JUb� <X�)*�Y)6�8�(�F�(�B�BH�+�9d��m!Y+HV����OEa(J8�tj�F����$�
0��^�Hх��Z�#�ӭ4�����X������*��/XUgEV�VMAeA���Xd�$,�p��)� L�"��p6 �O2 ��� ��C@�h@�+�P�! �!F�(H"q��x��2`�؀|��b��@j�y8d���,Ha@�eP��c-�S%���҂ b4���
��&�u����6�}�����Th��`�iQ�`ШЪ�$.
�d:�-2Y����A�h �����`xl%|qE�i3U�3@8��
������P�*:��Ӆ��'B�2x
+�i� ;}�
�Q�u�s��@u#���u˽�,Wr�)���0mΚHu�\��\�4e� H|���Xц .aV,M����]u�@����&��U*���Ы�n��M&2����4Y���A{�4�*������J�2�UV,c,�6]U!c��t��]tTeG�h�5S,�����T�%(�FI=Z�b��V��� �VQ���IYzG@Qw̄Iuy� !e
E��D��IU>����,�����d�e5}�L@�U�oL��J���_�H^��C|���eO��Sщ��#TbmV����*v��EX0(X�\4�Ƞ�cBa��bA�bQ�Мi)��łXhdZ`��b!"0�N����f�ܸ �9����5ӒQ�=R�b���A���F �4T�ȩ���64T��� ���� �&��T�%��.YVˬ,�rť��(��d���b�!��\�G
��JE�m��U 32��$e6P04 �pLP��� ���B�������W�֑����o��cL'f�%�V#F�^���w����� �Gs�E)���*F�̙ sI.@�D�DL�b5�0��+15@��d �eseu*ELX�aSd�+!,�RPV�V&�a�M"m����T ��;��v�i ������6\�Yrl�aV�{��ԪҎ(�J��"�VFN���,�de�&�s+2�+,/TU�d�:�� (���S��4!��+!Y�[h���3]�"�*��`�!��2�3�C@[ @�x� � �V�<�x���S�UH
,�������QG����+E>�S�<:�C�# W�0��ATF����("��+"66s���EP� ����]�""4@�Ͳ'D��XH�8�� <��Hi����m�n�i��q'��� \�� �� �X!,2LN��98H��� ��'�,�.8nF.S���
s�c��p1<�ء+!>m�����O�����+P��
")N�d� ��$���Ȟ�:4�ӀW%@�4j�X�`�bn˔xd����T4.���x
+t� :�����sssnT��D 
��B�,@Q�(�+��]��T�A�ҡ�j���TeaYf�Tl�](�aB��ɋEҗL0�h�Y�ї F#�p�B��2Hd�Ļ�#�w��h\���� ���ӡm���9$M!*��PW����q #�HÎ�6�$��$�
�X�Ɩ7!>>����F�"&9�4maCC���Hi�Ԇ�555:����>.>��PW��\��=$dO0 #M��}�Z��`�� %�(�*�Q�� �v #��@q"����dD�bjhH�2"dA�܄8����z1&ш��m���= u;э�F!B��Ċ' �U���T"zrA ��E�7r��j�I�&4U����\�O�$p��#�˼����1��˶|-aC�I����r���|���BM�ӡ����%m�V�l=肔�4#l����E]E �JH*p�PV*�<^�������ȉ������;*>Hr9i�
/��T�,�,�n�4pj4�ʡ�j�Ŋ�ś�&]R��h�a�.�b�ՕJ.��]�VF\1YQ����&��1�JE�T]�v�\�C?�B�1&lн ٰ�M �I>��N*BHۈS,iƖh}Q��f��p�� HK��"hya�A1;��IM&>Q�J
�I
a�d�M,FL�ƤM@Q_�����0� �p� ��T �b�L�r����_��o���"�X�1]!�p0�%]�P>�~h�Ph�@���\xQ!N�t����͡6�P�sG����zEс�E�N�04i��T� +�{�p��� ���ā��ʦX2����!<%:� �
���!9ZFH��prpHF�Vh
r0�����P�8��`��><| G�����'Q N�*$�Q��T�^�ӧH�;�Y2g�mB@��B�.X�ʕQ9Q��o2.����:|�����J�x�#��9��(T�C��e�
/��c�� �]�.1 ��*pm�D�q���0�-
�lZ^.H���3$3lf]���8Z,TV.��\��C1uF#-�œ�lZ+x�Y�I�UAyg�x��L�g��h�@�/<�Q*����a�8H�RƋ�@�K��2>����x�ƙy��$b� �Uw�N�x�)�6���O'<��N�6L��b&��9!Z��
�.J&
���X<�<���~ R��0 CpV`(�����;���@�k�˶�0#N> �> ȉ%�q �������tchތB���)\�}���m�W$�$�8��A�9��p��8;|:�#��pyG�ya��[��Ǟ:uS��8��
�� ]��j�*�
�N���`':������ ��(x>�L�X�a3oJ)JI◷�N>�f�'�<J�IEI� T(L-- ����'�����E���<R��q㬏<������Fn��Eq(��qb�3111����0�`�;óK˥.Ъav�TP]�� �2��ŕqv����^�"�,�] �af�k(RQ�Ɇ%��6,T���/��\��٢U$ ����8��ϪĎF��2%E/"N;"hy1��GYXv)N'l���>��G�m�,Q%a��FM�P�ϴ~�To?!Jq�&�������� *" �!0h8x�@a
0\D�A�@� ��
*�%T�����|���ˉ�EĨ� PaXD��)4���3�!Y$����! ��dH�6N� �F�tbtL"(��aJUҁ�!�G�>�a*��(G+��Q�(*�N�.��ʼn
�
�EOt�|C�1N�# ���) ! ��pH�u��5�� Ā+:3a���E �â�͜�3���H�4�N��B��'H�I��ir��������;�r��$�e
���0�ʈ��L<,���'OP����㥅ǖ�$!p�P��qBr%M,�����Y�vL<��<���Ì8:�ʡ����a� �6Ђ*1.�Y8��^.H`��q����xƒ1�qv��p�E�UB�
�UE�.��e�3(0�x�����f�r&�= �4�Ǔ���h�#��*DL���I��"T��}Q�G��HPz5O�y�m J}�}V,9�ͣN�Tv "l���>��HB�扚��������4�Aس���9Б��*ɀ���
+
�_��� �N�z��h�6�H�b$�@��rlB��P���E��Qч�zAV҈Zr`�JA'��m��Q�䓇jCOP�e�j����*9��%�yYP�g
���p��"�#�.#������yZ=
HU8�M� �@#@����>:��;(H�b�4ݡ��J)KhR��/ǭ��H��p��c��Lx����ɖ+E`O����J���=4����XP�t� S�g (��W��11L30���8ÌLC-\p}QA�>�>Ld����,�]����.��Eӌ<a��ƒPa�eK����w J�˴*��ʣ1�uER�E���I�A@Yc��s^���U7"T���ӈ�"h�S��X܈���6�%>�/>��=��>� �������Ъy�*�mg�>��؞&��x
+�I(`T����!�a�@ ��������������_��k���$�� ������p1#y��� �B㨎, tHq)��&�dC ��J%<�D�5� +��>�!%B��� ?D}�oN�_}�{��E(,LɋQET�(���%������x����HA�'�� ̌,!*B�@�<�P�/8��@D�$ Ζ#B
�2�HR�-�}�4Sh�D ǹ���`����
U'�L�=�r��( �qB�`(� ������>��W (@��ǜ)LÍ�#T��
/�Ģ1��# �Tĺa���� �4�\ �"��1�A���.��q�£..L�2�ʌ�a0�f#
�p��S���b�x�Z.��C �f#.qwp����
�z%P8�3�Β#�8����� �HSX��&��:����>���g�@���m ��Ŋ5X�i
�X�U6,�J��@����P��W��rBuT�X6C͇��L�����<D6GEaV������!."aB0���DK�#ϸ�l�=p=8��mplmC�1���-�IH6��m+ҍ�zQJQG%���͒l8�<i��j�6P>M���9�j<��io���I(B:D�0�"��#��ȤF)�B��DaAǜ
WN�.@�`ub1:�G�{F�&LF��ozrj�H�� 7����4�U�T��)�� u��Tt�h
+~K���>����@���d�Q�#T����(��WnjE�&&&a�����4h6�e��!��n*HT>�eA���,�RB� 8YAe��EIP]�t���.1$-ZU�ES 6,غ�����p¥����艣L��Wr�:����' �&"h�$J���4i�&�ȉU �O�g�H�5P�Q��y1�N�ŋby�Xz&X���B��X��Q�O)E&,T�5�� ��`�1 ����
A ���p��EZS�UH
,�PV`�h�!��&'�KϏ�f���q)�N8$@zt0"���<&\��� �0�`t S�y�Q>:��)ġRUҁ�*�� J0�
R$���P�<�M��ۚ{ޥEF �DTYQ�P8�@�� �t�|��`��@��z@��r:<<�@�! �
�������I�5��df� hL�t@�F:|-BD��HR�$@�-{o<���L}"��ݺKm��{���T���*L��2L�P��
�J�)E`N��']���
��U@QC�d��<z=!F������#
�4\��"�u�h���2�e��8�7 ��� Ê��T4TY�X�U�͋�T�b�P�c ��T^.�w
�YŜ�Y(�B�
˨/�l�����6�QFI �*���*A54T�S�ر"h�R&� ,:��G��m*T�}V,O�ʼn�������}Vŋ+�:��X�B����T���E6NP��"c��B��F��0h��*&��'�@QXU�����@�@yD�m����8�<�H}��r���ƎE�: ȕ: M�: ��@>U�.FF�cI\�:��m3iIi��N{�~��yU
I�LmW�Q�F�qo��2 ���$�G���d�rD2�"Q����<#U=>� �$&�4��/H<���x���:�:B$�x�e@��C���|1Q���[&<��&�NZ��������*5P�y��tX�B�)�=�
/�Ī"��4/0��F#.1T�a1�h�i0qP�!�qP�p�0�a���&,�fŞ,�T����Te�鋓l�a�V�����L.�t�Ҍ�\�����Q_��N�2#L|��Wqc�� p��I��nuS����>Ѥ+�b�#�Q*|��O���w�b}��!e%c�<���d+UrLN�uV��s��b����.URd� �. ��%�ӁPX!�>�^����_���
�B@q�<�c�R6� ��l�bu)���`\P�'���:�h�`DC���
O���P�<x�5e�^� @|�
f�"Jf�����AN������BNT�0=(*M�
* �X��K���#���=���z:XN
c��'A��|B�~F|�FB C�I� �xNL��-�gQ�Bq=L�bhϣ4�$ޑ N����I���yG����IpQ��)eAʢ�$P�����N,4-E`N�$����6���D��؊�(&D�2(
/�ıᆋ���(2���C q���Z � Ê� 8:L:�t�q��`�A� ,.,HT��2�P�bї 8e9rc)��U--,��t��h]�팧TT�vE�k��*��%Q����]˸����#l��:ѹ�N�>�6� �HhhhlO�ʼn�Xz5Q�������,X�*Î=���L� '�>���W�(yWJ*<0��9 �A�+Y��@(O�QXU�����@xh�$�+��l�B��'��3��)��ǞxP�2"Np�g�A��>0.|:��:��Cɞ�m3��sB�Nm�����Pl���T:�j��8�x��}���8����ሔLLtF>���RH�-!LlJG ���N�}#i�9 �D��$r1��L)N�L�S��3ν퐴I�ӏɦ�� UN���r���$:�bC�͋@QX�_����O�uV'I1@�5�p`�b��)@Q�(�*�,�d�8���<^,LaS3/0�3332�0�#1�F��C��hi��q��e�L2��C1U ˒N0م�-p�c �E�p�r�eE�lZ*����U�hQ���Ϊm�&�I�*jD�֘��B���4�U��<��PϪ�}�,N�y�X�i%���V(J�s�&�a�O�}���N}S�#V���1QRI��
��p���(�h���ZD�V���UH
/���7@D #�h�ƒ˜\
XX���t|R} �I�pxLx���Iq*��XC�� +����'B�Ȃ֏4BdI�)�&&����i8CiӴ����(�E@�T�#*���EI�+*w�{�/�C�j���PQ��)dx���' ��9N%�1�'.Х &:�J��0HΣ�<�d춉"4�N=4�$��L��'��;M�u���EU診���*�B���B�V��w����ŋD�� `�����
/�ĢB�,��b�TaR�x�q�� �L����8��4�iPҡ�y��9 *xyP�A�Tl��� �.�d��e�2��K���# ��PY��p��� ET-����2���3<L�dd��B���y�H�*95>��T@��!X���CB��ʼn�O�}T+1bmb&�ذ�'�i�)^�Ȟ�d3�в��6��F��t�"��=A*����rB�pÃ����:J$����E���`a"�
��>8���τL6�J}��F|$]��S���&: N̓3s�ɇ0 ϶�X���Be��=0�fӇӽ�ox����ڊ�$���I ���d��뎪:F:���3�A��sB����4q⃢e� >�d ��y Џ��H�„���2SOMNM8`�F�֢t�x�U"��P�J�yBTP}V�BM:�B�Š(� �/���
� �U��h�Ssl���֎�0_�
+�4�E[PV���
�.���I��30ᖌ�Ma������C�ڡ�rh9&Lxȩv� �'&]�2�.3 ̼3 ���� �p�b͗N.�e����4�&���N�d�@����ϴFX�ñ���DI ��ɞU �G�b}���>���T���b���y���U���F���B��=�"y��(���MW,�x$�K*0�. D �>8��S>��U�T�������#��D �@����nxP�D,l����������A�/<���� ����� ���<��G�(��@R2u��2)ϴ�ہU��OIBD���*�1��? @,��c��p(
�A���`;�!@���
A��' �\x �����Cc�A�����0x��EH
� �(��0t��t��U2e�2�S{ޕ��ZILʪ�,Q"�U�(P��@�QUd̕���'O�w��� ,N�uS�,nu�%H�7!\r��EqU)V�<��6.���]��<ˌ���˃M���cOxr��F��9ë �"TiQCB��B͌F#-�^�a�f��.��U8��ӆ�cI�_�OB�!t/DM��N��2��BP�d-h�Hh\���>�L}�3��b�G�B�'UbŇ�T󘞱>�L��dOF����>� 43��Q_���<�0Q��1V��ц��� �
��
+
�_���HYFF���<�
6�(>s�3��'\%a������-� ���A��TIR�vS�ԋ!��L!O���$����� &P$Y
��UB�б"��&4%���Ƈ�::'PN�c�Qs�܌}#i��9�7�FI��D��}�<R�VD��NqK�J)}�ԩ��L����>��
VmR� ,��(� �/���ꦧU:ѹ�����l�F���Q�(�*��qf��a9u^,��������2тA��qu�U.��0��0�9h6�:��A�j��4h8�z(]C �h2HaQ� �*�f�%�^d<X>�q��!����Cf|�J
��]��B�$J�^��lj1B�Đϓ]�P�ذ㪱b�آsu3,�>��h�G�>�dϪ�!�O<��&b���0��R�<�xw��7��x�
,{���H
(��Q� (�����N@L�L���@�!� O�!B���|R�;BB� (Gς��c�"K�N��I�40)`#!>��>>@� hM$ ��zS���&��h�m�*�l�"nX�BB�U�UQbCeL��-�{��@Q\�*���� p����6��f�@�s@l:8l E'�UP
�h�q:FӪQB�Vp ����F@�XhXL�F@) ���S��>PA�@�l\: �@�����d���g��vI�X
,RA��(���m�ܙ�ː9�6~}��O����|�h�G��'�'Sh��X���M͸��rH$n q�3M�D��*8Ѧ��O"�HB�RB���W���h�3K�*(hr(Tqa2�w I S� Y�'�䂅B�D���q��p�H�J��J�^LJЕ�3�
�E(��T�$*��6�6Ws � �=E6n��:�7E����%��0�4d(�! D�C��|R}LJд�� ��18'8H���0��c��F��2���#�z@��� �R��B��pR��x��TT\�@��D…����⤊}�W�� �+*:
�E���C`�O#o6�`���;=*HNI�9P��$�H(ʠ���q�������J��Vhh�<@ ����! m dt:Pl�اtUh�����L��BH�
�O�9��<���B� !h���~u�'+��5�]S���ӝUrf���"LD��$)��!h}bHZ!TR�����. dyR�$��4n�D�����XP��N�Ȥ��r'��x�P�8�� �
�J�kAt¸Z�`�JLJ��Q-&$�G#�CB���d}
&q;�O�x�ٷ�QW�/�7�@Q��� %@M$ DF��"B�†���D@�!`��pT8$8��C�����!Ft$H�0<|gǐ�Fq�D���ؐ�7���DI�s�΢�
�P
2���H��P�'*\���
+� ����Ġ;��<�bpP
�RF���`08,FF� �fS��L�&IUq7�&.*��d�J�ʊ�PhM��@ȀF��A��C��!B�dB
��@y�D��YVLf�����%$ː�b}DI��9�Q�<��0�XN�s��0L뎹v���G��z���6���*ni�%MHI"$B� #K4F�o4TP�&�"T�������|�܉Q���9qaKBeD�KC� ��B��q3B�#��$'$(� K�
�+ I� ��eCbH��
d}SH�S�X�1�g�<�X
)�pV(�t����'*���k�ABi��s N�P��R���I
�"�7@�����9�`}D!q�O�iI�
н�~�:0� l����I@z�OU ��e�G
m`|�b�QV�}�W�x(($��D��$p�'�ip;�<J
*� +�p�L�6���2t�c�pQ$�tH�@Q,�`H,P� �@�N�p�n��u�N"h
&��B� ��?�E�B�����9$�f���D�S�D�0���*����h��Xh�26�Hdm � T����9 h�1�c��,>���J�,>��ñ��u㬚Xu�KM2h����cpX�MGV�D�*������`��j�|}�H�jF��Xq
��N8�����5B�B�CcB��d�V�Y�"Tu�G^BM����$���6��(�C����f�]�o������%H.�G��hH �@
Dž��<8�*� >0xt�)�Ը��'�`��1�R><���v|��hH�HHP��<D�R��24�S���{��ŮP�"����*T`�b���Ka�{�� (�@#���$: �$P ���(I� �@���BC�� � �h�IS�m�����@I**Y@`�eB2���a�\4�D�PA@��U�����  >@�p$��#k�#;9E�F�������TH�i���O�TM&��θ��{ ���T�F�6���ʚhR� ���Ǥ1KD/"L����is���?<��$F��Q��=�F�PW��q;�����eB�`�b��0�P��4���l� �<�SmP���È�:�ֈS���h���H^���"Ñ�GY@>.i�k
"L���YME7n��8t������O�zϸ�� @��Ӫ�)>��S��U�pLzlJt��!װ#aV����N�*B���
���%� $N<�:q�������5�9Q�E
�T�<$�`�a�|��J��H(Pp��%M��S@�F��� ��� �98��9$��p�G��{��(�T,LTˊ�`��)�)�0p(���=���x.H ��D�0��(��H������b��#�(�Dneȓ�H�DM y�q�h��wNvm���)a���X��)�2%��<��(����P����v��6�S͡h�CD�'�fڀ������2)&:Ƞ�b�c�!>q�g;6��dD�MMH�<�+�a��b�uQv͖*,%N$XJ������l��9d���B�ٷ�QW�.@5_���@x�c�Oω��
�&>
� N�|P|���<8p� N��1�I:%:��*�Q�%\�`q>F�+h�U!���D�>L�g[���{���z�I�K*UB�Z�(\B��Ex|J�ap��P&�HPdRG@�":> HH��Bu8$�L�����u *N ���LLU��⥛ �6X2X��� @��K�@���%�%@ H `� @��H�#� ��@QeQ�W'E����Y�H�[4m�iμ�3�Oׯ:㳳�<�w0H�G8�����6����"�$�:Шy�D�LÑ&B��yׯ]�D������q�NFX����
”� T��<q9Č9���$J�$D���\jD���*i�3���y�1>���X� Đ��9�G"gd�F��0��l��t�89E����E�Fq hsL8:r���>��� �Qq)׮$btHmC�s�Qǜ
���*F�A+(R�J��-=�$�h��H�|����Ɖ��!QE qA0����Ey
D�€~D��u(�����>(CD�P�Z�D�{�N��� �O �<�`-$%s�
K��Q`r0"X��'����� A�DH$ � �H40O��*�ɵ�(����d)н gҡJy��/]�לT�DrN4p� Dn8��4��S���8��*)y��}9�7�N��NF�TnD�6h(S���e�ѹ$-�P�f��'qrqA"�x�1�k�톘(rrD�L<�� �@��A�Ɯ�DIȚ:���q��Ϫ��c�B�!r�w�GY�5 Hq�,X|����
*���*����b8
,�pV`&����"!�9��X<�и��W.|J�'D���&�&\&`J�'� N��`JtN�.8��p�  NJy �C�A�T XN�9 m6���"{ܑ��~�rE�T��I(�P�}c%��}�H
+�Ќ�^�*��PJ �@6���Ђ���n`�ABɀ@��iڵt�"��TYR��&�������b��`@V � � @9�`�@"��ph5�1��0�� N�
�����&4����
�m Sʡ*�{^yU�ב���-�*F����q�G^G8Q
T@��'>�
G3f�$m�U#�$�����m�m�((([AE�H)NBX��p :�6ͪ)h�@��S,F��alj�x�█�#$i �SL��:����4���l|4'x�q’C�&�M�Ѫ���Sf�(�#��������B�P�>�F�UqIs�s��N�(F�p-<����:0��3s�s<%<��:���Q�����)t��N�l6��R���6ۜl���r��9BdK(��Ey�����
�D*(<�d�TxT�=<�Jɂ��d)DQ8>�h*�P�u���'$K2X�E����y������R �2P��2�vA��h�8 M�YT�'E���� zi
d /<��K�*�ם$t��9�H�I�q #n8ѹ��SN}
*H �*��Ҡ(}:�{6i��h\��[F�[F�l�ˑ�B�*!R��>.C&XO�#Jx� �c�L@���ќ��($'�d��1箘Ԇu�B��d}��F��"h�g�#Xr'�GYd�,X�z{�(�����;��H�Q���8 �~��20��88��>&`Ή��l/!��3��v�\lLt��xN|�!Bq��� �e�$
R J��� [Oi����$���om�PX�bLT���YT��FK}����)b��
Px�Nl|��p(��'J B��&Hy������R�ae@ު�*��@�&2T�c"�q !2���2B`� &��pn@d T$`�`=l�3�(�������Ҋ�zW!z
I�W��ʰ��iw/#,G#ew�6��NB��GU8�Fh���hJ�iH
"z7#N��=%�6��Ȕe�ގ�̨��QD�Q@Q`�:Tz'�0uS�"&jji���+�4h���C]���q����:����X|\��&�8ꦤm�C��O�#��i (�'f�l��x�4�(���|d�@<mR19����tRu���B$7! �=p��%��+��T:1`u�l��
'%4�쐥zR��M��om�os�$�+�!-(DM:�����dKJ��W���
��T�< �##�*l(;:!mT�ɂ�ԁj[c��Ų���i4�*=PīʅU,�DdH2*2�� �!���@������p�@J ҀA��E�F=E���b��Uw1^�w0��{]�U#s"Tۈ� *>�C�d�6�N�2�@��P�@�C� (����bʼn��9�%�Q��q��m TM�j��ri�lj�O(mb&�MH�4��ShǜFL�U�=bF� �2ŗLDL��iuH�4���q�N�D��Gc����r8��H�IIE7m��QT��>~f�
�_�?� �����Y�!�ZF � (���K6�HB�8� Wȸ`p��� P��
O$�8��N"iP(�h�t��'L�RD�y�ޙ��u�ꊒ�®0�d�(�@��}�Ԁ��"��7��%�f���#� M�&l0:
�HP���1JC�*�dV䭧T�ʀ��*���6*\�JL\�p�F�������t0�34�Q�0�>�M�pp�`U ( �-��(�L��V����K"N���:��b��s�T��Xy�F�M*n>ѥ�� h�t- N}1����}�͠(�)��q�18Q�0�'����'��S�<�y螉�M�j��r@ХS���ʼn֎�9]9֗h�ȉX�c��������#"Q��FD����GZ"T��sr&����D���9*m��$e�@QM������ �����`y������b�tR}��D�!�����8.P�Tu�B�h�2�M2�#�܌��%N��jb��)TN'��Cw�=�‹�Uą*��D�P�V�Y�}�W���0xl�N>��A�ȇΧ:@�D"t*2'e�G98��į% J�PFP��i)P���
"*&,\,.���ˆ�!ԦAр��6�p���e!8#�@QeS�@N����AB���T�ر>M�0���8L݉�N<��r$�D�8�d*�U HZ@�%���&Ϲ��9#Еa�9�0�'�S�m h>��F��$̒D�5 (��&�H�ر=B�(>�g�A^zx���'99<�m0H���M�i���T����Kϴ�A� U���IH��E6m�U�8B0�;�Q���� �pF##,F�B1k�C�� �pJ"�����# �y�B���g�a����8�'Dq��D�(L�1$�ӂ�TM�m��ӽ��鷨�AR����D�(�,M�F��Ex0O�
��A��V:�2tJtNt1b|��������1#(S9��u�QĜ�&��X����c����a��FD#!a�j"l@ C`R�� �@��� `c�>� �!@�1w@QeS�<�
/���(���{:�,O&]�ӱb��'mb%H�!��G?B�P��T.B���\����@�2������====D�%O��� Nz��&����Ea�mD�ꫧb� Ϫ�B��Ӡi
t�EEGe���<� 5ܻGY<I ��"T����H��'4>�֐���(���QXR�p'�Q����R"%Ljɜ��F):�1��M<�`=���Ħϲi�F�HRRGFi��LDբ$�&4��<��[s�_y<yiQ��*@VL�V�����(�'�>"q��H������GEO�F2��M9(e3�2�iE�p��p��Ɍ(�c���y��RE�F^0\eP�Ạ̈2�`|���� 1���۠(���:���􂧉i м�4k��֍ȕ:Ѵ�m�n:�֏$D�:(�������\�9�2���Q4��-#P�#�<���=<�� U�I�mT%*���G�Βh���ʗF2�w��\&$7<i����(4��#
�S����ê�x}�q�D
�ɇZT�rw\�=�u%��(BpQ�`)��N � �@��@�@@�@@�
��
@BD��H�` �D I�&�@d��" �mQ�"�#�A�"K��'b*ob��랁������œ~�0����DD!R@+4��DU"k� 0@)ɂ���b� :D�"�B� �}q�yK<3�X�ڽ�����g���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ͪjtQ�rq� �� �$�I$��$��(��,��,��,� 0� 0�L0� 4�N4�4�M8�N4�N8��8��4��4��8�M4Í<�N4�N<Ӎ8��8Ӎ8Í8�M4ӎ<ӎ8�N8�M8��8��<ӏ<�8�N<��8ӏ4��@Ӎ4��<��<��8��4��<��<��8�P@��<�<��@��<��<��@��<@�9O@���<��@��@�<��A�=�<<;9�A>?�����;=@=<�A�A<��A�@�=�<��<�<���==@=���<���<��C�<�A�A�==��@�=��@�������A����=�C�����AC�;C�=<���C�4@?C�D=C�;C�=C�?@�C��AA�?�#�C�<A��<;@��A>A�AP������C�;A�8���A�C��?���<<@���� ���P��� �O��������AC�<=���PA��P�� ���?C�?C��?C�?C�$�=�����ƐC���%�����������P��P���P��C��? C�?C��;C�?A�C��=A��C��?A?C�?C��? C��?�C��?C�?4C�D??�4?C�?]C�?C��?C�?C��?�������!���eÐ�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������C���P�M��5��AŐ�)����������)��� ���AƐ����P�=�� ����@?AC�D?C��?C�T�5�P�A���9�=���P� Ő��P�-�I��!�)P�P�P�������Q�P�!�� ���� �C�<C�$?C��;C�4?@?@�APC�<������;<�<���;<��<���A<<C�AP�A@��@�<�����@�=�C�C�C�<?�A�@�?�AC���?�@�@�@<<A�@?C��@@<AC��A���@@��?�<���@�A�A���AA�C��C�@���?�?��AC�@���;?���A;AA���<���=<��<�<�=@�?��A�=;@�<��<<��<����@�@�����<�<��=�@@�=A@�@��<��A�@�A�=�<�8�<=@��<��=<�AA�<�<��@�A ���@��@�=�9��A�A9�9�<��<��@��<�@��9�8��8��<�N<��5�A�<����=�<�@�<��<�����@�<�=�=�8�8�����<��<�<�@��<��<��8�8�@��<��<�@�<���<��8�8��<��8��8��@��@�<��8��8��N<� 4��4��8�O8��4��4��8�N4�M4�L4�M4�L4�M4�N0� 4�L4� 0� 0� ,��0� ,��,��,��(��(��(��(��(�I$�I$�I � � �q�q�a�a�\��� �+�j��G �=���?r������0��:q����%<H��q�׃fFCH^�y��.���Xj�[���Ň+�t\�Cn8������g�u��H�+�GiD�3��)d�v�,e!��#2&��H���1'��ZK��p1Xu+��=�+Ea-.�`�!�R��(�)���H ��� �`�P�R�@����G���G���G�N���D8� �$jԯ\~��3�J|���11 ���"�����%$��h)pu6H$���N%��Y А����1Fe��&���Aة-$C �HTH Z,��K����A�P i8Ԙ$DA�` ��:�Ip�� ��D`�F��P�a��Hh6�+��?������������������4����?�����B��o�� ?�p�:V��P. /!��X�ðHF���n�����^�| 5�Ŏ 3v��7V�{�4fꕏ{�M�������������4h�}i1�֤��Dj�=����������q"�
V�`���1:Tifn�4p٥mSj�[R��$����B��);�ТXD} �Y��~�&��#8m���;X�}�7���}���B��G�}���u�퐶�"̸��Y;;e��]!h��\>x�� G���%B���%?#F��Dm=�L�0m�H`Y���0.� ���`��uSGH+?���`Y�Dz��J��A���X�y��W�/<����V>��8zh�j�٧5�ɻLf̦#V�)�֓�u�֎Zu�VU�n�+*c6!u�R������gK�E�%c��K����1�Y�� ��q�(�|IFT�I+*b1�f��
��S8j1/@��H,X� ����b��+B*�!�%gƈI�N�����$��"���C�6������ [(��0$@D�$�!D��F���iy�����#qsד� YDRLB����%�'6+�- M��W���J�x\�Q18�pXR�Z��Pb���m�k���]RZ�G�19�ۮ 0Bpۋl�5-4���|��p�jjW��4h�`Ѻ� ���b
��>��������-q �kՒ+>��8p�dg �S#Tѥ5Sj�L�+�:�"tH�#!l�ӴH�Q:L�������{��0Z�l}�ϡ����ПB������:�t(�#!@�'���e��<��e�YBBJN��T���I$L}�BbDĩ���' �i�ZRZ����K�#D,T��q�.)6�������@�BT B���ҏR ^��%Ӂ��G���KJn�Gbp�I�P�& ��`�z,X�5t�s�Zr���$g������@D�$d#�A�(&�q�8IDS�Od�Ģ� Ȍ!Po�$�71��.�'tx��]V��ckܬtr��.��n�v8�r�q���&�4�8�e��/�n���� ֚dqFF�JF;d��"�B�8��+���:��V��pa�++E�H�0 �D$�H�F"�)Hs�tj��#���ΘpyB��;}.'@,A�u�X�$'"BH�-,eD��EtEB���4:4 H���'F��A�i Ȍ���vJD�Y#�
��1@TЌF2%N��s$J�R`�T�'-xt%���aȰK'<L3'6.���#��,݀1*��S��΄:2 P0�� H��p�1���3^>^��]qg����F&/� D"q�I0��Z�(DC"s�%�H��h@���H�F)Ŗ�Yx��������K���\�
�����O �D���Y�i�����`2PPa�T��˦n�q��G��Fn�Z��BuM�￾��������Fh���p�|�׻zRsD�uŷ���Is�W+>���v��J�KJZR�gSV�4�$d��JB�$�(I[:���i�k`Y���^��9Xr����v,�����J}����J��У|����$��u3�HP2�,����P<�ϟ>�.$$L���mGQ6��T��B��) �y�-�8���V���fP�0F�V�Z�̹q�q��~�4������E���0��.f �����`�'t�4�O6d��B+T�XE�-� 0 �ر ��!��&!b<Č- �[�^�.Of������-��# "u!x#y(k��&H�WA��!J��B�W(9^�y���ֺ�Ӆ���ո����î�\?1�4�i��Pɥ���:ѳG欨e3MNJѴ���ӑ�e3&��Du�+Ec�v$��lK��ϗ�� %��FEC)hȵ��T2`0F5pE< 5�� b v@�1DJ<&> 묺�O�t�"R�# Z,ZPJ\������D�"B�%̕�'b|���Hԑ�X""<D���Б1DL�R2�����bZR���aB1$h����Ed�)*,�#F�D��F����f���������� � ~�%bE�$R��z�T:������^:.���ˇl�6E%�����H+0�*�+D:�1��X � �6ЇLj�wD;�ކ�0���l>C�H�dB�]^*���!� �
�EV��aZ*�Y^-��ur�%�L����Z� �N,{��2e���4>����i]T������Q�7�Ff��*ԗ�h�i�ZLh��5���-q ��,^���I��J�������X����#D���V�[D��H�@|� 5��k�kS"HP����V��YCB��$�)I#X�����B��HQ�i
3�l�a�.2�L���Yq � O=HD�&�6�萑6D��*2��I� �&�i��B��mƛM��p"`wB�Ø�6�\勉R����{�������`Va����h�H@5WN`؅Xf��d��pl 1H��A!zP�L@L"MH*�"/cV�s']�y��A�Zd��GՔ ���0�FdF"� 6Q!�cTa a�'���DB!�2�e4�c�W�(OuBf�:�x�X�����b���Xv,8����d�!d7����2���#" �2֐���Ւr0�d�q�"�e���TJ��0���V��C�+ ��1 �� H4%!е��0J�4d��ߍCf�3�2A�������w���������"�HP*� @ } �HI���?v�`���d�LIFD�,��(`���!�u, "!�`w.��(���όІ) ̜<��A- ZH���ie�TE$�Q$fұ�%���!&)�K
���2��BL1��:�QQ@�J- ���P?��G�r*l�h����( �
Cq@�0 ��ɨ~0& H��6��2&b��0؀�'�JC�0�( �a��5ih6K�)�|�^5g1MC`�[ Y���5A�A5H � jr ��X��̀�@5�6��s����a �? � ��7P��V&@������dV@-<UpY`=^. �,�.�-�r�VZ*�(��>'�DC�}�U�lMtC�!�!� |�Ș�o��Ģ�?���%`��Ƅ#�A9��ش�^t[lTtWtUX��]q����j[� 4'Z���I�&����������Ժ�d)���3���ЭJ�S%KzRw�.`�i3�X�S�Q�Zn�bd�M-��-�H��BT) L�J(R�$i H�-C�geDC�Nн ڡ{M�!F�;V[#m�I>�#HQ�m
S����
S��[D�셲ϲӌ�i��ϰ@��%�2TdHQ4LL��$%-,"mD�"Xӄ�7B�lR���y^�*�@P(AK�6��<�H �=��/� @� ����Q��>$�(l�l�i�El�#!�Bu�<�θ�0B���Q�׺M!D`��HI� r�BCB$���� ׂ �Փ� � JJ0�x$�I�p'9B(:�@w a�:HJ�F�JL�&Z�i:���8.��B���a�J���12@�XD�.k9 �v ڜ� Y�Zf���֜����b�Y�{������l<���<��WQ4L9i�0���' ��B҄��#�$�f+TT"� \�uF�Y)ʂ��]>�#�T�,@�U+���N�j�9�飹�������3Oh�}��W�j�*V��im�̒R��b4��#Nʑ���(��/+b\dVx`h4l��h��خ4-���)��
���3�hC-`���Y�¦B�(���,H�A =��t��qB2S���8PX1���(F1p��E��\����9\��h�r"�9�D�dD�R""3�H�h�����؟�%.-* Σ�� μ���$��Q��F������� ��� -��U��8DlFfRArA#R����0��Ax����*@��Ni�"PN��P���p%�ǎ6��r�r�� P��%3' I�,�MNɈ=e��H&@���T aiS�E !�z���� �x(��^`�fBł <��6R�J��\t���� �5�Njl�O<��]����q�=�J"����P�^+&� �:':&�؛b&Ũ��Y�ЁJ^!�؂F'DC�")4) ��LlOb'�
�M�V)4nZ�˦�{� �0Z�դ�o{���G��J�jk������SL�-H� ,m3��ͦ���tܹŪK�6���Ů�y[��^ɥSIS)i5SjP�i�d���P���I��H�%��*1 � Y��y�'�:��}������$�HR�����h������!F�
D��>��j�-��h���Z>���,<��쐺��쒥D�*2g�%@�E-"ZB����$��'�H�i��B�6��,ב4��tOZ*�"�Bl>���b�Q9~& �!zJ����ˣ���E� �~7x��\l\hTlU@.!EօV�T"�i��R�x��EP��8�X����q�T��G��hH�Rf�JL�{������ �=% ��qY�u��`,s!\�I5�NAN�8� AƢ�w�7P�f���.���j�! 1a�<!�4'ݝ\cP��e�@��R�RqA�*�J `D�ȸܬ;�+�<�h�����R����YV����8��',st��ܚ;��_rz�^FM=��e5{@F�F����e��4Dl$����Z2���TED�9X�\�� h>. ����F�a�dc&# �RI��K�c�s�Bd1@� ����������g�?���������(�I� `�!��;� f!��,�-!�KIO��K,CK�`ؔ:��t")8�h���XĬdN�A�!r��P� ��H��+"�"q̔<2FF���b#��
C��0��������(�ba �lJ�Pȝ��#��x < 5�
��v�b�n� ���Ԃ)A�3������b�����@+��*T���1L�P^��q�����
4�p���^9
�ȴjx�X9�5����P��ᠪ�� U����k@~��AN���  �$0`|@4A}�� P��E��D����/@����������}�+DJ�NF!P� ��E$b!��D�TloP�hEE��L�VX=t~��>x�����X\,��n��b��@!�
�L""�D:),"��10�@'�'�*�6/n��I�ޙ��JLh��wX4�#�}�������x�i83����3����� 7Z��ޤ������uI�돱`n�ڦ�6������,(�J�����)�Ѳ�ֈ¨(����} ���=� J���y!�Z'B� ����B�
47�$X}c�B�:b'gd-"F� KϟB��Ǩ(@uE�%�KH� ��D�4�" IqI� �Ze�h�`���| 5�vȲ�XhTx��Nx}��D�Ph?�]��xo��ԏ��9x� n���m �q�m�q�Q�Q�e�U`��D�P
��D�!��x�Ѐ�)�n�T���Q���BP`@qkV���@ڃ��$��,q6��8m���� < T��
WV�Ԍ�"��5 r�S����Y�&�+z`�,J�7W� HX&+]kκ!���#d7�qy��FZBbR0e協��i(X��^P�@X�V�p+Z\���iT/qרY7ub���:���P�y��wqa�Uϸ�t�����
j�o�ȫ��WIjќ�gQ�%��uP����QK���"h�1[�EΗ64V6`\�l\#).)!-'���FK�� ��� >V^����:���:���:���:���:���:���ExT���8J%��Z3��as��Rƒģ���b�aYB�¢�
�J�P�!`|��ϔ�$&$!!'B� 9�������-*K���+��&.-!)�hjXV���d����2LR��RA�m"�f���!�h����ؔ�,�M���� �2c2C �� Ʉ"e�D���uJ#p�9^�7=0_�5 �VT�Չ�j�js��i�͂�@#1 1��P�$7L&(q0����n&Dp�Ѱ�� �k���
\�3�s��~\^�ٷ^���������cŢ�B�SB)!���1�R&4"��D׈��a�\�x�����?B:x����� �1�e��"�����!/�� �Bz�hB#�5h�&ΈdbdA�!�'���XmIk��E��`��-׾���=�_ZN�������-����~�����,��27��'}��K{o{��=�&m���מq��ijU��m��r�蒐�}b$d��<C� �QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQZJ��F.�%(J�IQ��B�"i��B��hR�FO$l��D��IV�L�*$���J�) h�EB����$T,�\LLY"l�����l�)&�H�"l��)3Ȑ��F���o�f��
��E��bs���b�N�!���|�~|{LJ�N�h���E�����b,�.�V .��E���Af):*���T��� �<x�c�8hD�8h�d� ���90/�S��$"[�Fm)X��t��*>
� h��ġH:PJA�@�� C`�/�#t��p^�X4/6V��`���A�z���+`�jv.16u��d���x����H�@�H�D�%��(*$H��C�`�XE�b1�a �+%�k�t�b���l��.�U9J���;�T8�Ws��ac#���P�_?"F0��O�}�X���R��fI�<�20�F] ����,�bH|h%�6�H�q�d�lѰ�= �L2c "`��.C!H`TX��G���P,��(h� 4x�����hFɃ�H
�X+�H ^ĸ�fP�Q� ��C�@7c,�%%����x+ )(�H2,J�4X3, �`̠1 D����%�A*"+"m!���F%#
pq$��(SKš�R
���4a�4 N���98�JRq�1ь�U��B66��|&���(�?�_��������Ϳ��������E�P���A�
f���,����vl'( � ��B�b��2�H DA��E�q��08'#�P��� ��E�`� �@/�"��_���`��� Jc��$/L!S�+V84 �A|��F�B>�5� �|�P�l<�gn� h0��� �� ��D$ GV����9x���ƅ���,E&�gEE$"zaV(�)�,1��2b�L$��� �=l~|�>B9���?^_0``|�x}�щ�B�NhNlOX&D:A�PZ+��,����w[F���{�Q�o`ңK����������iůu���d����#Z������m3�V�`�I����L���"`�ڕ���W�TH�#BLB�+Ny `@|��|��ʍ�J\(F1�4t�}�&#4B��ȑ�D��h�hd��t�*�R�z$h��FJ0DN�$h�OB� FYD�H��!)X��WJV�%&JM"h���$M6�Hy $N�#^��6w��_7�o�(4![D��8N���r����#�����H(M��G�4?tv�������u�u�u�u�e(���A��f�� �S� �#ǘ�5l��HbZ�H���P�T�|#�Xv,pj�a��f������P�6�P�$y�\͐����!�b��5��������*�Uc⪪�Uy��r�\�,,D���Y��tL:yx���E�
,�>"�!�DH3">J��JB0&@Jh�h�.��:�"�Mj�غ����H�e%��ֺ�s�����\e��p�E�d��� T̛��ѭ�*���F��Sm'�#��.x�`�Ѣ����Ʊ�AK'��0&'->3B3<T�`������Y��
��e)hr-:Z�2�lV:Z���' F%
�(',VXX1l�bHy a��JϱBZHt���HP}�B�6$E$N�*ByIQ�P�H�pи�@؉�B)J�����)R' KQ�JZLt����d#ea���P,׀�5@bsTA��,�)�t�Dz������Q���r|�L4Z�L8:�@���
C�����>�/����Hɰ���0�����c�t��E#BAH�Y��p�h?�> T@ 8p����3�� x�BJ0��c����]��W�p�-�1i��B�b�ThQ� Eţ��ay��S)�ݓ6Nf36L`�L0y{#�H1����:A�� �� �o7�d �P� �
Q�
-�JL���2���Z�*G�ꡃ�{������T���u���J����ޙ#�l��E�u�w�4ZL�[�>��b�����v�H��Z%l��H�N�%�;��� 5���J�#(F�(�(���425��I!� >�hR�6�NLJ� ��P�$2D�TIQ$!X��6P�$`E@�)� �%JLL["l��&�Z)l��&���!"h��HID�M�t�z-�C4cXkȨ蠴Mx�hNx�X'�.<~�x��cև���nj���[:>& ������68tqG�]lp��W��J��v��9�� ��Z2'M[=�e��@< ��*�� 9�`�F0�����c�́������B��B��sUg���������f��6r�5�9T�jU����a2������6�h.X��/ Zz㬼-�`�!]��Э"(>s��� %.D5#-B`�# N����ծ�l����u��m���v\m�.��c ��e�{6�D�Rh���o����nP��$L��x� ¤wQ�k+F���P�.`5�Єj���( 8�hJ%)� 9� �LR�h �����,ց$*` ���@�^���$�b ����X�, �H%p�H(�D���` C�=����YXȭ���8t%�= a(q%�1",D%"-D�2�A�H%,F$��Ap�ID#�P�I,@L#��{�T!�Б�Q�0�F4&� ��� HGD`� hk�B"�^/�!50P-)0V��V�( :�E� B�����A��Z�i�#�ab5�HMF�/6�:l,���\25Nb�7��&T��8�N^�y���6 ccAyh1�� ��!��
�0c rA���� �� �V�q �/�����?�)�7X/�����U�ش�uh���7t�Q�9���MW�8h�É6ZhᓦN��9��`���H�L&N4At�0t�� �'4B^|z��`�a �*�'�$��h���F�W���u�wԌ6��|М}8m4����Z���J�������t̝jK�`�Ŭ{�����A{i��=��+��թ^��:��|�����IQ��v���]�jt��F��#%3:w}��u 1"rdi� �У>�#hd�td�$ȉГ�"F���`�)��Ȩ�\@�)�W�!)l��WJ["l�j2dd���ɒ��#$d�i5
�6���#�����&,n��
��9y��R�� �S'L�0p��e����( �6`���(��@��@��/�7zgN'/N���3�jޝ��v�I�g(�Q���R�V�<�L��@����j�x% ƍ������j�p���@k4l�̤ cV'!�h�0p�-V+%mX���\R��}K��ղ�^X�P������ ,]\*��]{"�ز)t��x�"%�Z��
�K� $'^'�DD'#p�D�i^����3dE/m��Yt9�B�rƝkϬ�a��R���5|9��y�ۉu���2��f�3%�l�m 9;Ys*Q�4����em8�k,�0iqCG�-#p�H20�N�FcS�R����J#Ć%��(Q�N���;p�� 5�:LB�2���bR�20!&,KP8Ĵ����ce),�lJ��E,d��b�ĭ����R�S����������#'#�&E#(!ZP3*t�hV�PБ�`�b�@ؕ�0�Lt�������<����a9�"�c��X{t2�E �Y�d / ���@���B%;)E�EU 
)em���
��4휊�����"�� ȲlBl/2d,�1H^�����ӑ&&�&��2`>5i0�2�B%i#���� ! @{F�|��rX��C0."A�x�������_h[�� �R���"�u��FLMX͙3��l�;&���-6�6�<��)��d��&.�:c �c1t�a0�L%��d��ѵ�/p~��fG�^AdR"�� ��j�͢��a��h � J�#-�6��X�6��h�6�^5��4V�RѢz:m&'�yrQ�h�;��˝#B0LV��`��`���do(�l���gF'uˤ-���E!lp��U�lw>�A9)�(�H�����F���<��y"�t�mJ$l����H�*$�R�JJh�*$�-�y��CA>� �*2�IR�:L���&�d�I��6D��d�$��B�,��,i�x�i8���'EWG�&����dу��M��̝2t�Õ&� ҏ�0Bh���T� LZ1lţ%��Y�bt��/R}+�(� �Q��9F��u�U�g(ӌ<�bL tl 0��(`�� p�BLRg�0'�>P����V�|�/�E� ]BѰ~9���'���@b͛(���l�r�a+7V,�6R�Q�c��+�����v ��\������Р:��֏2LB D���I@TD��d"9�T"*#$e�FDTFȋ!b�V/R��[m�rq��i�ez�R��У,aw��n�-��ܮ��0�PH����H`ٴJ�Ԍ��YF�ɢdaFd�{h��}�F��\Ȭ9�D4 Q��l�PkD�� @#ȃ�0��2�)����:|��O Y��#� �� "��Ee +`B�����،���1�`�Pb��R"��XR��P�C��#��RPg Fd���hB��u!'% )q ����EmY ��&��ȸ3 rC��9XH�D����"`�&� �0�.-@�a�1� �Q�ч�B� �PO:d"�_����������W?����\���g���3���<W�z�w���x(7Z,,1N!S�(�Ӄ92P,*6T�a(���(0Ӂ|�7�� �'�dž��L��`�$�$⩐2��
$���)� ����؜�0���2CAh�/f"��*�E����@KU�j&�@l�,���R�?6 $`�0���c��(��:�����r�rN9Jj�ٓ���i6q+Զ���w��5d�j�ˆ��f�9�GL^b����/1t�fx�^�{���5Z��'�&n\1��fɣ!�0ͱ��`�����͢��YrR�#WJ�'x� �6��g�cX�5��F�x�6t���t�V�m:\���o.HT��1Z������FN]$t�§��ѣC5�m ^].t��wQ#!h��)
=�F�yy�,ֶ�ZT��*�FJ���ѫ�ѓ�B��"F��ѓ�'�m4H�#D��`�$d�"F��B���[B�dH
D�,�D�)1l��i24d��ɑ�4L����p�D�!援� �F��'�f��)6��2�M��2�L�5`px��:u&i��8Xh��)�B��ţT�(4j�F�0R�]U=1jr��h�+F��i�\�t � ��ظ�)�J@��o�t �>r� � #a(�b���' ��X7*Z73���$�8 ]9g)S JԶ/�>�[Ry8��z������n���}c��� ��ζ,/:�\b��q��m��N΋�>*��*�����M����+H���hW!>B*�bF-�Dn�n8�a�ۡ�����{�����ĝl=8u���{���08b2��<PD�Q-����se�;��;2B�u#e���P�ˌ���6DĈ#EgA�NuF��+ 1��`�5dj%�� Q�V2(�J@(�� }�'�@�[��X�:K��� �X�[�1(�)�^X�,%'�F��JHd�����a���å��/B���+LQ��"����en
�c4+�F#K���Fd�'� �����9i3� ����% ��`�Q�Jƀ!A��x��P,�u0���b�v'"�V �VŴ���ZL,�Ms�NE��'��
��
�P/$`�n������T�Nj��Y��ʈ+������k� ��� �� P���� ���|��(8ੀڄaa����I����ݱ�C�ݱ�_B>hu ��l�VM�6d�p�j����8l����wN\8@p�ٓ9�ݴ��d&S)��ÆLיLϚ2c2y��Ĭ���Ù��hᛆѫ�M�F���WK�4hh�h��h� �0JV�[cg�ch�6��h�4h�OF�ry=Ϭ'� �HI�F�wJ��#*l`NN��F��`�O)<0Z$�� �gF�43B]'t`�ys��"JB�"p
0#{�ȠY��{ކB��`�u���IF���th�O.��N�1=
TI%D���N��N4� m2��W�ZJ����I�Ȑ�H�&F[&JL���&��&F�H� $��<F��X� �h2���f��LיL�S9���4`e4^g2q#�i��6?��1l~��)�d �f-��j�ɣ&��J�B�,�u=b��i�Ӷ��������:�t�fO9&6Zs2JBfzy�iP�`�aP��&ī��7}R3q������b#al�+�C��s��ٲs��Ԇ��,�0R �,\�r���hT�)�R(\�*��`�{K�0 �.:����^�kh�( �D�,�F|5P�+BX�n��� )^I�<JZH ���v�'X,z��h�S��V�ON����?ww�h�� 0θ��ge���n�}�g2P��J��ftl�tBRщPq*
qPr+>�G'�V$#(.#�q�!$$BHahx&����7�@��� 5�G
���(W�),l������Ń� D���(% �!��$%��bt�hJ�%K����Ȅ9��yb!%��L�(h<"�#��,�9��B#!�8�\İ;X�K"!@VZ.��`H��bg� ��1�)�b�@p���@(��ray�L�_�[j���
��T� ����0���1�
��C���ЮPVO�-�����ͻ0��W���=_|6�k�a�;nz���1Tf�.��ձRb�/*�T=A����3RyH��4M��'�������R��]/t�v�/�� ����J խNb�[5/4<j>4MG����M
� ������1��Sɍ��Z��p ��0�� (�
0(0� Pa�����r�����C�$#�#��(��f����Jɻ&��l�i�5c)9i)��͜8��R|ґ�g^�������f�G��g5p����G �2�L�<��FS8���hɔ��n��F�w��].'�\�f�Ѳ��X�O'���t�O'�%Ʊ�m+i��'� �'��OGFmƋ��!SM<�aC��ՉK�)����4hj��� ��m��*ZB�+D��� �u�ky�$k�%'FŦ+߽��!� $l��y<���� �%@�d��H�'Zeh�8�Ci� ���RbY*2��V�-D���M�4R�22gI��y22)5�ć�d��'Q6Ӂ�C$-�4�y2�M�N�L��05d�A��6*8l������ ����P�6@����̚3Zj�=KuuN�F��j��ҧm][��1ur��(ZrLj0H���˩ ��<�`kP ���F��J
�(�R�P����|2`d)�\V�h���NJN�':�v�����pt���y;�w,qiz�We���u�؋��tq�nvȼ���� �,��� hO!�%Q.$�<B8D���� mV.�z�86W!<J�&�W� �d+�n�L�˄τ˄˄��&L�b���ʰ�4�ЗX��P2N�fW�X���<�h kG0.ekF]�l ��F|`̝PQQ�$�#���\5b$��F@{�����f����uȁ�'V�@�P��-׺����E�%#b�%�R�`̕��"Sĥ��:X0(bPRX���Y�2֎�I#��+%n���Q�!���G)��d�:5#h����y1Z9R3�4� �$!@Л�F���,�S�f�a"@Q.��P��t ����ށ[�OH��&V�
)���Q��@��_:��~�*&�L����I�u3��ɕ )�hz���_��`�>���A��{! �\x��B��A_
�Džx��E�  IΜ )X':r,(z�e�V
X�!4��f�ӊ��"���SI2�P*�R���r�4�'H�{u�\r���s�M��\�� &�� � ��� [x [�%ն��|�;��& @0�S@<cǎ1�#�"�\�җ�8V���� L�壚VS����vMf�Y�֙y�f��q�N[L󕦯4y��h���&�g2i6`n٫�.��lѺ�S�S)��IQI6hՀw�.;�\`\`���FPFظTa4xK ��h3^f�6�̈́�L!0��4���̓J�%�i�����tT �,���,�(N�hP�n�Q�"���r�
b0�-
RP�$ �H�`�~�7��nN€�O� r�I@��1���,�/+m��ǫ ��'��˥���FкO$h�N��)BD)IL�EBNJZJ0D��z),��C�g�e�˚�%��Yb2Te(J&JL�KdM%@���J�E$��I�d��'��#d��(Th&�������C�����^@� ��x k�
��p��8���wS���~���p���S�C: )�CɁ&�����V:P� ��^ �~ �0('�5��'G����\
�H>j��U���V�6 X,e�����+Z���t�����b �hA �2n�i��7��h����͏�9-9X?J@� 1l���1�� �9{�M6dѲB��+T���z���եV�si�WXN��]sk֯B��׮@��B�eLI����M .l�l �- 7!A�t[D}��8��HЈ���@�� E� CPn\ > g��.�[�.>� W�^%p49pk���=xepo�fp5�<p0��,��`��������S�7?�������g�?�9�?���Q��h)U@6*���)�)�0���P�fʅ�*�ON>J x�|�PRd�5�&�(,Tf�D���1H��J��^�yQ��=Qµ:����2��+uk�� !�� �&DM�5@ND=�`�'�SK�)x
�B��xz ��� ~�AF0��� F�˓,�*&��`��"���"�⤪�RU�*8T,:�X]tMZ�a��N�����`)Vl�����>t2�'Q�D�zd����C@�����/��� /�O���_�D���.]>Bz��k?����6p�FSN'JjFR.p,��k� R)#��I^Jč�#�G�$����w�:L|���n�K)y[���K�+p�P�K�R�Td�r�����o+�6#8\�se��Z�seq����#�X�i��`Ҧ��R�ji���,1>l��?t�rzj��U=+��g��䌤>���$e5555#��ޝ驝MO8���e3͙8�>j��)�<��6r���=`z;`���Π"t�|���HB-��@�XP����*�^��S��*)�i��JΪ.T�X�UP�Cc�Q!ԣeu"J� ���[
�6�LҝL�0b�:�=-:�0<�aذ f.� �+C�g�����M0! #���*���/��0�������rB=< Θ
���Gf���T*:��Q�����b�x����Ǫ*�\t��@^��
�������󫎘�����N���|��܆���$P,�܇���8h�ÊFR8��Ԏ(e5SaEl�v Y��,��#y6$��$p�M$t��$�ѸQ(�:�y-$�n#^R��[%�� �<���J��oK\.yse����+���V�W-`Z��ѓ��I\d�k%����ڪvT�����8h�ĎR+X⚪wU�P�ZjF�jjFR8��Jjw��u3�(<�r��bjgT�����􌛯6q4�y��É����_�}�]:��(�&>��`�� �ࠂ�H�jht�;5 ���u2C�'@U��� �@VK�@�����b���Px,h���k�d�.BR0�R�^щ%!�XʀbJáHm��@C,J �2F�<�@HC�E@��C�/%�Ȥ �0������-���>
��ÅN'0LI�:��Xc�7V�A���(2P��|�#���,T��E&�V(H�%KNUNGg Τ�_Z�%�/qQ�З���,X<3]�!V�xJ�6��IP���� ϒ� Y )�$�>��?C��U���(�>�tnGdc�=��D�/� $��uQ��AQ��5��
ԋ]Zr�@�7n��h����b���m��Ţ ��b�����W��c":|�_�@B���|��%(`Y� �d'������͏&�q5U{+�3
Hh�"
(<1`4@��_��2#���ˡ��?:ǃe��� �!���� �gCbdC�� ��m I�Up��\讼U<)<U�d���?:� ���h7��E��P��dR\`�AN�,����URI�#:H���)�J3��I���D��l�I�'d��w
�-l��'Jc Z��K%n��4��-^4�V�c3����F �,�:\��%��K�O��]-s��6�����Τdٓ#ƓGT�\�ښ� צz�TML���>�Ď6qMH�jji��SST�MH�#' �55554����( �H��p��g �@�`�:�qZ����$��a$�Y@��L8�*!�@�����BM
�a����� ��J22����xh��,�͌B1*@T�Ȍ�tD�r'`R��a�Z򀺖�Rb�A����#��,��ē1�[�W �H�倷J�˕�
X@(`Y���4h���Se)�PZ��q�����*���FR�H�;� 4�Kn���R�1\uHu9���% ^�<�<�<�:�=�z����yu������ �����g�|;�{!ݗ�}���dC������������hz��_�Hh��c4�S�z�%���2�z�����V�:��eP�뮏�e���� ��u���,8�z7b������bB:!:tv���������馍$q#*Z�֗�V!B� ��@#�L����Y� k�Rl~ �N�M�o\������>�!"��dB0D!��Q�L�� ��'���Qe��Xb+����o� 7� �T Y��EW� E���B�����蓕���:�{LPȤgIX��F�o(��Dġ҉C�V�C�%l�<�N�C%R���Ѥ�W-p`|�0d`�S%l ^V�s�"+c�HFl�,��8V�����󏾶��SG,�4i4tҦ���uC�%��<��jg�e+��MUPʆSSM�H�G �Hx���H�5#���i�����2���$`�����f���R*-d�.Bb� q��� �K�Hd�U
x/p��L" !P�P�PJ�TX$���J8X%�� �C���Ĥ8��̈��2�,��������-eA�� �<4P��`�9�8TK�|�ؤ IPv�c`���8��I�#�l`�d���a�1 ���m Y������{�1���]���N����zǂ��������\�7����4�'pF����<l7R U)R��P����9��*L�)Pf�UN^����EU&�W�6N.�9R+g+�����ҐS��\�
א�m��6p����b�s��8�Fy��4F�R,�"$h��HH{l�p�h6E��C\z����4��^F�]A�\N��A�E � � �Q��e1���,/X�hY�9X9Xp����������\Z�K�n�+<u�,h��b|�ж#!Z$:�����2!U��ŵ'
�N����j�>+�-7Zr�`,Tt݋��w֧Z�����������Y�3� ���%�:�F��N�s��Fh 3!1 ���!F|K>L�]��2Ѕ���� 4h���W����� �q�4���d
�.��hk2��6D؈dR�� M���G�|�C� ̉�2!X�
�D:(�"ˢ��� 1Yx�؎�R@߇��d>��A�!��
LD�C�0,���$ZOFu��(hdL�"����;�%��&!F�Z��l��)��d쓲T�T�Z�r�\d��0`Y,�[2Z��3��-xɡѣ#K�.<0p�0d��o,��% G�}kJ�Hɳ&��S�Vʧ��uA�M%uA����0MR�j�UU6�zjFR8��gM�N�cɩ�(NMM6d��w8�z�=J� ��qC���94
=�@L`����Y�Ml5!�K�H�A34��&�10���A�t�`�Ht+�In�&:��BMA5(VP����{��1� �(Հ�~V
�`��W*A�l��׃��1����GF��TlFrX� Є�$� $�Q�R�i�%8����-��r��^��������'p�B�%��#��(��TH0 Qb��h�0) ��h�/�5�a�TBP�� Cdb��6K������)"* IH�+�Q�+cW���ag�-
��2F�,�f0,�1�I�ĝ!*�+
T�T0Zű��V��X���(���HTl�W=X������jP��z��^��������+�Î���S�C�!�] 7�@�{!�����'HĶ^C�� H������T"����-�ؘ���4IHh�� TLAH�Ꞩ�c�Kk��=a���
�LP8/��8b���e��=����ǗZ0e� � �&�l������!T =S+A�X�@�g��������X�p
u�%���up+��S�M����B:���\���2Zd+
Ao%@ ����!�ȉy.�Fȁw,%��Q04J��
B 0C����dѥ�X4µ���8� B�q��z��ȈdWlW��]�w[�?dx���H.�$ @��S�+�+,[V �� GN U`�ش��t[pp�]���"��めXl@/Ά�a�xo�+bk�tNr�*��k�*r� Z#"!b��4GIJ�3l X#y+�E�Γ�[)�:S)yS�J,`T��
�r�[�F �K%����:N�l������ .`Y,������4��Y:��[� 6dٔ�U1T�OURꖕ=C�]T�'<��P��TTҪ�8�����2iH���/ML�jjjy�֚����+�2������MN��AIx�؜؆hM�-���qu�i�y�R'��15H�b��Y��_tn����e&G������]4p� �Lj �� �-�[�G����pxt�z� � 4l����@�J 9`�|
H�;� | X
��J�(%F��4
؊�ɉ��XY ����s' i8�N����"�1�0q%��(K�(F�� �$F6Ch ��j���K-x�=�+���R�#,� �I) ��4$H 1�ѐd������0��ǟb���|(�0Yt��<
Z�Grz�:�*j�%l�l���[=�Hݾ���k`��Nh`�������@�/����x���;�Abٺ���U�(\��6�I���*4V�A����2P�I���+4V��̓2ٻk��� b�uL�^���եR i֠T��3�W���^3��� k(P:F��Ĥ$,���x�V !Y �!P:
!j��*�Xl|9L-��<�xp*��<��@���c� � R�`�u�ң�N�9R'�J�*�냅�NW�tN�u��D#�\ݳ���Q,h��_d��'����ZXf��F��\���Z�
V���2�e������*gOd��Hς�<D�sD��q�!ea0Y1i��V� ��>NN ��d�9@rF�0�FnDZDy w P0`������q���� L–i ��V�XV��ŗ���H1�����e2� ,2y�#�n1��
�����Bˢ�x���m�u�v/<^\/�8x�x_b9�#w���`!c����lB�!��Y���`���FrN��$,P�i�Ȥ���%p��s��Q��S)��N�K�^R��J(p��r�FL�K%�80p�X��k�^Z�4���Q��FKK�4Z�ɢ����g��-N����R2lɫn*z��z�R����T�5+������UUP��T2���Ԏ2i8h���8�ӆ ��-�i����`��*z��Ӻ"by ��D��z�I�
Ђt@� B�!��s��2&<LlD<PpRhC��D�D,TZ'4&�(/O�� ̈&D"��Z`.EȲذ�TtYpt�x�|�|������s
�.����֌�2Jx�К�4�t
-���[��BܬȔ@#yH�"�4�'�"b�p�V�h�Vt�X*yP�D� �K%I^J(����a�5���CP`xlҕ�ẎX�^\�G�B�Y,��K�9Ҁ�(h�-edši��b�d2є 6I�� ��B*{R eajp"�%C�#% @�J��<^����u�=��-�\H�z�F�/%TC��@o]$\}��ܺu�w^�!�_�p�X!v)Z@FrH�b��^���h�v�=��y�NZ���$&����
��l�c��X�.Z�ir�U����j���K:��F�]R$���XV[�, W�gp<�b�0��0�=``�^�b:���t�0�^ :Yt�w=>Y{?a�@�М�RD(��� ����Z19N��%!�JCS�� �Ld��F���7YTr�����Wp�zh��M��с�S�fξq!Zac4�8:�
bS���{I�O!H��lZʐ��<�4+T���`�Yi��6���.`�-�з=� K'�B�ӈCE'�@����\�.HЄZ�
�&9& �2��|>BJt'P��1X�,XF&�=n��0,�3�P���Ry���
�L �fB~p>@���"�c����2 |����FN�6j����FM �/bh����Y��c�aj,8-E&�������x�����������\tn����:x��ᑼS$\�*0. � ���d]<�vX;�E䠓�KD (� ���8A8#$@��:������ 9��)b�t9�D����%t�����ZhU�
�*ЫB�B� 8��p����� �p��Y�D�DkA�A�ER��Ы%��%L�:��&$n�1":��&$n"�<���n��R��Č
(^N�6��)^W+���,�F/�\�������4lx���ђ�s%����ו�,����6�$d�lɲ���uq��Z��m�g�uK�,`��ǜX�k���iq� 0i�O�y��q���@��^��go����<���̞>��0imc"�"z�5h�R"�䂓6(6)�C Ή�DƄK��"�VtV��M�Р�S#"�"!�I�E�Y�I�B!Z��Ⳃ�����Y@.׋m�������$ijo��𭒖�V!P ���9����\
������eD'��0�x�0�B\4 "�p�A��$�"I0n�� $IA�'R1�(#21�{%J�,P�����:��<VK��2 1�L �P#��(�$�,�(�aȜ A8�R#��ea')˂�5 ��4�0�@�_�����a�4���r
4 � 0�4ME�`SAt�8 ����2����Y²�-��Զb�E�.�6��z����$u�!�굆��-N|��Ξ��1d���+>}�/i�
y�L�gP�2H�o���G@A�RDc�"�7S��
�E��� @ǮP�x��Pm*5V7Tn�SRl�\Rf�6ԙ���\��Qbu�����צZ*�X���m��X��� ,\`��6o:|�'�S�Β!!:3<D|�� ����cM�T0W� XD8W�0/18,�p,� 1�i�/L� � �H;8Lp=P&� &\��a�ī�E��/q:�x��P^�2��5"�,V����jcr��o.(Y=B�2���HI�FC�QH���*5 ���&���uF˕8�ū`�q��M�Z����^Tu��Ȉ�GH��F�
Z�)".B��$#�Z��RPiIF�aѠ��*B �b����%!�D6D9�N �5�o���:��u�%�>��
���8`F@�� ���\*EH�IAtͳE�� ��y��V.2h���l���'Jɴ�y� ������Ń��_x������������;x�����c���ӣ���M��Q^+�Uf�"�~�H.�n�x��ȲtVdQ�����dG̏����Uƌ�2g�6�N^n|� |�����}�mH���#��x��Ѽ\lo�.2^�{#�GGm�2Ac��V�Q*p�X�%��":F�R#�r7��8L�iCgJX��&>J�:�VI�)d�V�c� �J�-td�b��x��#K��4k.d���E��K�-t��K�%��@I�i#&��r�!����z׭z��׶����,>�
�,q� �m�X!`��}���q G�@D��}��|���F���@��<��}�M�$���xT�K�V�[x�Ȧ�����}x�����^��Y�^,F� N �bۃ� � �@dz���t��ຼ\��}� � �̞?#�FEg�����r�v�1�5�����1���)� h3A��[��E�CĂ�B���E:"� � b+%#�㥢�K�E�v�����lI���A��_#:L" �F�b�b��!�X�hp � �����PĜB��-Ek���b��X�F��-�H��p\��c�^�t=� �4 sg������_қ�+X�ֽ�=[b��\�{b��U�,X.��b.):�Rby�M��DՄ*|�DLb�,�c�0�b�?�T�C `|M!{"���!
ÿ�Z )Q��h��ӱN#'"XX��Kז7V0Vꡊ�*�elT��*Du/R6VuX����^�K^�xw^�Hvq��������{�0� �X���cHO���u�A������(C����� ���0 �a�.�w������!���J��p�!��P�3�1`���+/:��تb���W�Cu�7HVHW�{�n�u��O$eֈ��HB����H^y׆�Sʂ䥴�u^�`]V:�]�/b�q�^�x�\�1�]�e�����%dBahD�O�3쐇 ,� �g��h�Q@�T��TAB!����옌�/E*�C�2�@��9X��������?��H����xM�
P�G��,L���Nxަ�Lޝ����hɫ��w�:p�3*X�:��V'��IH��G��mX�����c�3lՑ��=\><At����B@b=��Dئ� 6=ž
$!�V,�-�,<Yt\��2:j��ft�f������b��fM��f�|���&R�� �����-$c���5�g���;lr�~��x���C� ��ю����l�p���d�N�$n�1"z)��6$�I]Fx��=�X��'bPt��-�y<�X��d��d�xɢ�l�[-��e��%�-�� e�,��:Y��(d�Z5#7t�pҦԺ���՞V��U�m��Vy���k�B���6��}�̾��д�"��}��>���}�$(Z>���8���q�Mx��D�
��
�H��-G� f��8:�����M�j�x�t�v������{��9dn���_d]��0pс��Q�CvE�EW��1��`ʁ|��d2�DŽ��S�A� 3AO�<�mB�
�$M���C �62 q��0� ht.�ḁ8�N�É:bp�R( I��dBQ!�0]��bp��jZ ��;��*���kc��dJ�ea�Y
�r���eak,���t`�I�����; `Y��y���Q0�@*@6T�]5����� ��2R���B�ٰ��+`�[�qb�k�� �i%\���.P��嫂���ƋX� ��0-u�Z��c>�X'^�2� 'A>���!d�(I�X���IM��eiH �<��1R�U��ruΪ8V��^�#a��"�� ԃ0��MQ����8R�����^�� ԩ K�֯^��i�-`��,C5�O:����:��^�H^|�'BRt����`�xl�Ca�Ja��0� 8d"d�rB��E����A���#���e ��^�hd0P�� �yz�\^�`3n���,!*X��: ���1 M��8}���Bu{$�:BHu��2�Ȉ��ӛ�H�B��6�勌B�<u3�be�تu�B������t��,�<�Hϐ�%B��HH�H΄Ny -��¼�G,2,Łn#)D��t!���� J���"��G$�H� h>P��� ��| �W�\�(���R�IP�gU�SǓ�N�[��� �����zJ� �*^���c�N�����:hB^����#�G����G�W�/2d�j���{�������K�X� �����c\[���s��i����U�hBj�jFL�. �A��Y0<o7��j��#�Q�C���+L�9X�鏛<����7�����1��L��04�Y�;o�Ъ(yD��S���K]+d���LH���ؒH�̓2N�;�JNt��v(��'�ѱ+�<�咳�g�])�:0^2��2x�屜`t`�e.d��2�JT�k�_��m>���ㆍ�6:��n�^���Vy�WR��ͺ��6�q�,q�8���}�̾���/���|�Ϡ}�Y$�m��e��^Gx�� gG��]/��f|�挙�4<j����3� R2lɪ�f 9:��d���ˢ�[���:^=pz�z�����`�{F�x���~7x���$�0������)�
@��R����-�<����%i�3q�����#b��C��#��JG�Γ���' ��,1Fy�!�"��G�g��ѰF.�(F!�%b��P�-<4#7���%b�j��P��baQ `�\��V)z1����PVQ͋q{2�`%P)�@L��|4Z�C(H�[P�8��r�}Q�ŕ,�ԽP���e��͸�[RB؞�ƒ��"W:���� OT��-V"X'u�I�������!
��授�ΐ���3��"C��(Չ�tH���;҉
�PV���J�TX��c��6�h�[��ިFT��![bC���W�5��Z�[�1`X=�sb�%��%�u����������C������u>���� hX�`���6X��PED��7x�r RB�16<p��#�(b�3�:�6 ޼'��'�X�
�l��A�u���-;�y�n�օ ���7�2� { �|t� oo!��n/� �ly���X�h�Z�p��p�\���EWO.�,.�|n���<�������c���t�D*Zį#�,eO-�#�:Ї@B�?�HND����Z�`����+����υ<,`f� HP���B&�e3�\}k �=�\u�:���\�m�q[-Դ�5-�q;�Χ:��RuMI�ǔ�) ��H'��O��=d/d �3!0���.3y��2��`Y�n-�O����e��n��q�݉��+�n��&��L\0y�f3l�j����MY1d�?d�y�F�0d�ŋU�Bl�|Ɍ|ᛆ�G�4;t���y��I��?����V#p��k���S'd�N��� �R'H��R6$�7��Hĕz5��)y\�W+u%lKV��Y,t��L���L�R�;%��'d��LKe�-��,t���F L�l�s!;` ��o�
;ˆ�O �A-d7B\�&�kt&Pj\����n�M� �a7xN 8�g* �!:d'N`�NZ �A� �g�>�C>�τ���� �!>< �a;d'�|'l�b�N� �g�>��2� %�� �:^���lLؙ�2�O�:`���l�+�O<��jf ]H���&ΛL���/<:<>^@t|Ɂ��H��ۃ��. 8Ahx��倿Njˀ�@�0 ����UB hpR@ �-!`�#��p�J4&9hh )p`��:�R\C!��V��lVd�9Xe���I�da�P3# Y��0��D�10И0�H���
C,�9�r�,h ��0F �Fa����,�QHr* 9P�� ���Z �huFVJ4FD�*8k�^;Uz�k`���� �)�� %Ef��� ՃPf�XPj��F͋� ՃLl���Z��U04qb����&ԛ�\�z��W+e�n%>���e�ũ�� X� �Z>��נy���ȉȋ��^y�ŇP�1�)�!�"�~� �vn R�T'�*Ԡ�@��ʹj�U��J�L֦Z:Pj�Z�EC��6 �i�5^�z��\H���\��`r���X6�v+�
C�:��^̅�xR^y菡:���H�Zd �m�(� �W���1�,n ��(�/�)0N�`*� f�Q�v��BV�`�bU���[��Ku�]M^�b�� j �Y=>�����$�w�"��h������Ǒ��Z�i��N �ױ:x��1�ίmի�;�a[{�@��J}�JP�8} $�'X�#Ν%d�D�"3E��1�Hb�2�+���A��R"dE���t �
D�p�+E`AԨ* k�����_�� x����R �i\R���p�.ٟ��{�+V�q˖�r�mKJi�'eMMS5�TԽK�1QPt��G ^b� #�GLJkH���G���3� ���3p���&O1v������ �
W>/�2p�bt�b�����fMl��I����jx� �\3h��i��m�L�6y���8?d��ۆ�08p��FL[ 4>p� H�Ӄ���æ��fl��$��
�,���'^R�:��G�Q<��)��'I^D�,��N��i[ѝFIJY(<T�d��7 eGJd��I������c l�Tt���KVĭ����P������OTt�8 ���9)x���F��_�,� �6�BtB �5G�p�&�Bn��*��g8��ם �3��|3���φ|3����@��-�-Р��C>�> yН2�Na9����\`�{%�0���j�����FL�N�:g7�����Φu+�����N��j�с��N�:�����������-�d��:8<;��x�㷄(���� �0s�&�YS+��U:���:C%u����F%+��F�K�%e�I+bV����ܤ�9�4�ș�FĬH�I H�&1$�� $%�Y H�1:1���Z&/*��$��`�,t�X(t�U&>K͇^��t���=��D"��"����=@����u[��ިXR�aq3�E���ر�^(�b�UN�H�us}���^)��� ����� ��b%�E���/( 'P���|D����'H0NN��O%԰L$*b�b����XX�ե�]l`����u"*� ��ָ$�b�q\��R�\���8�q^��6#fX�ObtKz�����<>�,�(����t����P2��\T8K����������bŀnU)2��Y�A���H�p��%�^z�oִ� ���A�[`ɂ�ePS��@
HW/uc l޾ٗX��bˤ`��l� ��`o8�����^(�uh���E��O o@�Wu��Մp�'�Ou�ˬ��y y����:d�^�/"^�|��#� �F&�*
�P��ԌD��Lt�7�O��R�ЁTs��e����I�*)�cq���Z��O��m��8����-��˕�6�c*]X}C�պ�ݷ�qcOSSR�sƧ̞hɔ~����L������f3��f�����0,�u���0�0���<�i2��5:i6p�l|ٓF��3t�Ӈ�<��U���O[ �g1dͳy���wM��G��8hɣ��6��0<f���@��-2?XAd���
*p��Ǖ(y;���:T�� ��u#�lHؑI"�H��I�P��N�\��n�+yd�ҥ�gJX�M(bO(:O(\Xt���l�[-�-t�Z�k��V!Rl*��x�O�t�(탆�8΅1�s��:��:��p ;�S��d SaThxU d ��7@�8U�vY$�;.:XU^�U^W@Ω8��;M��`� �Aۃ�i��«e�v\
�*����0��雦��8l�zWR<����y�4���&�I���%<����R�Ht������əL�W�^�zgN^`���x������b዆L�0/$�.#���,��V�(?@�-L�������#(&IO�� HxU���Y��,�98�H�� �~H4&"$���*9 �J9$�/&."I Hϒ��1��`F\R"��RFV��T��B����ej�éX\ʃ�a `v, �`r'ZJ\G�w��^��Er �I��X�M����u�W�j��0Rh�6�)`��Pn*9Z���Qbu��N�.�`����c!V��᮹;��-t4�`�� �������6/<��^B���&B1@FySD���� h�@���b�rj�#t���) �5 ���Fj�-N�=-N���UA���Z�8ꗮqRБ8�k� +�=�K�D�Z�\Z�f1^�y���N� �/<��<vu��&d��LjO}��" � �!�p�B Hs���B6�*�W ؘ�Fct��,�L��X6���W��J�B�KX�q�� �us<�T�:�K�zO<�n��8� -�u�=k��'�D|��������Dh�mj��W-^ y��1b��!}����^|�נ> ��e��C���N���d��$�D$��h/ #@6#-) P�N��dJ"2��! B��$�Q8Ad�QP"�(� H@��5��Q�qE%��q���!�y��<� ��������e�c*���g�8�նζ��n+�z�����bl|�g0<`ɔ�_/��b���]4p�e2�MWM�ͅ^{�}���fgM&�15y���I��̛8lɳ���'8y��y��5�,�-1<jɢW ��zV�!8`h|�m6�/4dڑ�i��g�6��dL[2^�t�|FAs���J�(��S)�>N�;$��(<U%>D�ȤgI$R6$rY�Hġ�]ҷ��%t��D��YҶ��F����A�w
W��V|�S*:N��JΕ�Z�d���f�A:=p:�Ƭ t*���l�@а>t�0bps�����7�
[�B��9���\ �`�2��_׃�|���:o�S�E:+���Z�A�tfA�l*0�£Y�0L���S��S�>{���υ=�s�NN�b��T�'�9p���$`�nt�i8�<r��)O��px݊GS������N�<���H��jU����c������4t��7M2^`ك�-�q W��|A���mZ��P0@���������8\|h���Z��Z¶$��\$NH�"�c����*7INQ%6$y�ȌȎ��H� D.����KbǕ E�+J^X+����J�R�`�X�X����,�73�O`�����:�^X��qY�"��*��ب�z�uM������ �
�ծ��1X,,�[uP�Ŷ.�/.�-�<�R`�DK��,/`�Wu�¦xR{�O�<'�zy�D:&?�h �A��!��Si�����e,U�*W'�$ӡR0Z��[{eʜT3X�X�������8����+ć`X\W�^%/:����Ł�D��:$���Q�/Oy��ײ4e�DV]=���(��Av��,�E���Ι5L� ��M���� � 6 �ά �M0 e�ֆ���h^�@���LS��˝`�E+.R�� ��>�"5���?Er�0dl���XD20��!p����d""�c��\ 0^Ă��GS����װ���מ�xvu����Y�y���#��O=��D,��d���(KаB7@J�C��rV$b$��Q\��AX���S)bN"JO�b����(��� 9K)O'{jXݞi���:�X����/u���q��U{�+k�^ʪڪ����*�N�:��U�R�7y���W �jɼ��I��i���6S)��R��f��?�*��3:l��ӓ�̚M�4��⑓��&̛2q7t�zFSR2q8�6>l��y�&n��j�=^fى�wM�b�_ ��a�%��8m0d�8�[ �bс�F � �&\N|��Y�N����t���k������$�H�$y1�n��J�9�LI(ؓ<��Y,��9�v$�(d��c�岅���&u�L��4��E��6Q� P �e���K���<��6
��U�VB
�Z�}��H��������,D ���@
ɠ��R�TD@��t�RP'gAG�pa8(��E#�(2`{^ � �''�7�������< }�N�@����'��>�3`���B��Υ:���R8bl���WNN���j鳆��H�3ұHu+�R:����S���uEK�1H�gS1Lu==;�d#��� ԗ�a5t�������Fl��@����$O������*��!\�U� q�sqC��x _�X�����߄Qž+��4��������
` Ѕ�fǻ���,���,���,��O��8 P!�P�.���o�������!�r;Pr�rp&�ѠV���P���NB9�K Ն��e���V��-J��a�b���8���8�Å���`���@O��b����̢d#Lj�*:��t@F�`�� ��??����c������������
� X�
Ѩ�H 8�n�UPb��A�A�:�Aj��k�(EP����ֶ�t�$�L�d����NB$���OГ�䅤a?$�0Д �0�N �`��0ᄌ�f���� (K���!��:���lP��*�f����5U�4��U�(e5#)6q#'�J��i�J,qYՕU�TʶU�R꣪تb���*��`��b�GV�\���z�����Pꓪ���'��:��.)r��uӮ�e�8I'��O%y3�����DW��#86�M��cF�+x���G�� 8\��Ise�ѡ"d���<���e{,&R�`Y���Y� a�S� cp,���59Hjn鹩��sCw���͇f��16:j;7y�2�g
�͕Vl۫M��Fްٺ�e��p�y��W�:��X�v鵙��c��4!u��&���2�?a�y�PP"Bz.����@j.V RC�Br�š@uc��]T5�W �aEm��Ō(L�:#lj�&:�4OB ��=$��$��V�jFC�PkC0� 8M�4��j�<��g`Y��ՄI�o����n*uK�UUUV8��ӆ�)���Jy*���:��gUU����WV�SOT�MK�X�:��g�^���TT:��������ʳʙT�N(uS�j��f���^E`2p0e��qh(hB��(�p!GX��:�B��R�
Z�q
DF��t ��r�!f���8l�!�Gp8z�(�pQ���)�l*L@�)a�1daPh �R���p�0,�PWK�z4 (����җ�;���'c������@�D�� @�\8 a�� �a�`� �`.)E�pf�Ԁ-F���IR���X��Τ́�M�X^*���/L�1R�<H��`$p: @��T�[A�����5���)��p77�������nѸ�nM�BAp�8 ��e�#��uQ����U j�Um*�ejV�X��ubVظ����+ձ��\ˋ�
�\v��"��#B-�#{�"<,�"i��� `Y��q9�b�QH^����&CU�+���9[7��S��mc�I�e���&�&����>H1%�&.@� i 2A���$b@�d��3� ��8��u�H����d �6�m ��d"�"��%�����pMdLx�O��X~_1^@���«uh�.4,EgE����D,�)�""c� ���t> �/K���5� 2@��D04G �8yf�������V��SSSR�6q+���gLuec-۷WRucո����:�Ť+X�yC�=i�����Z�w�uEk*QQQTʇ�u���U:��_�L��4�@�S%l r�5��Z `����<([|�7�Ā��d ���px<���,�H@o\z��@��p| � M����@�:���2.x@� ��!��6���Z�Y���A|�1 ���z6BfC���/���<`b�&��1b^!� � �`Ԝ�6S��O5 �c��r��m�B�@&/ i�㐳�B�f��-�� �5!�+Vy�G�@e��0��2 Y���bvl`p�����H&�5��j/��2M��񳆃���+uY���EOTd�ꌛuq��+LםTf´Ƀ, �8��ǶfŊ� �/uٕ�&mO�zC�:lt�F��C�,א>����y�����Y��� ?FN���4�[�2d �e*:� QBP?� @�XD��B�?JГ_�.'�LĘ��G��$��N�0<ćH�-40�%����3@̂A��+�c;�1��u�p��t[�M
���o����M���<��Q|�9������X;tr|rF;���\Z,�,�D�)��v�
��Q���p��#h}�߇�k�`P�� ~����N�jjgR2qH�FM�6d� ��f�2d�b��X�<�������ԌT�����������(�q3�)L���j������2����*u[�Y�� )@�/�^rܔ�h
P<�@!w#i'�D�r�A�!��"0R ƀ���y�;�@����4�2�p^���xU�@y]��(�0F�Y���:d�
oO@�F P��� 03�l�Y��W�U0]���D����PJF"��[L9xOGB^ �@�����a��nn����^ME�@D���}J;H ���j�b�� �a��^H"��LK���^LE�p����6��2��p�n75�1 �X�\J�#�j i`Y�l{����������������̿�8q�F&���l F�F�٘j���[1L�T�]6��
��Յ�Q��mI��U��%T�i���z��̘,`���H�b� �b�����s��K!:PBFx.�Ȑ���HP���%!�1��k�.1x>�B'�#��Ѩ�4$�Rl�n����+�m�+�
L���X�̠��O�}�JГ��@N�Ih��"Bq,�%�a�1 �Q%HIC�H2���Bz%�0’a0 �.� �G�i�����Aξc�, 5����ų��"��ۂ��a�]�M����&:JA�dG�����u28�W����?�H'�m"��]��3Jfx���� ���- b{B� ᲀ!�0�,���MMT�ji�3�P=#��4j�W��rڊj�TUNu5=Ct�)�\J�wR�jꇦ>���F�4���̤mEEK�WVyS******)��| 5� ��
0N�@�@�O�e,?*�D Ux��K+�-$Ȩ%� GD G���`�6 ��$&�.� q�������+�1!����#ǁ��WJZP%�9'�� �X(���U�X
��k`�K���@���J��Hb�%��f�� �� �4\f$��2t�5G,���=dva}���Jr�M8br&���3C��"�q8��A s1�&�����~ �1����QEA�q���Ť�Et� �R#P�b��/F�9Z�$ ��e��f��>hA4>n>4��L�� HLų�BɻA�T���U*z�U*�X`�� *� ]T@X�����+�0p�� 8�����A{�Lΰ��:dB�&{$��Ai�_a�y�8��K�Xf �R'Xŋ�����X/b 9����B�|+$-���!`t���!�D��(�Dx�y:��Z�5堷ʔ��X��.�2X$\�H��@���t A,0z��v�Z^�W����/Eز�T�� �EFw N��8A��Y�AbAp�y�������"���"��ua� n���JEɪ\9tݓ7:r�Y�#�1y���r8l��Y�jX)@��驧 &zG��5Bk2<��U/QR��L��
�R�zG��sP���>�ӗTS���Ǔ8��u�H҇N&q[�*�z�
^���̦e)��@�_�壷��<QR,2b�;ҽ;�f� �%qC'3�WZ1���R�\q�T��n��2�GU�ܘٓ"2�K�0l�ӊG�j�I��"�\\*�+e�f��� �<��B$ �%⁐A��@# ����Bt?0�@�_7b�rlÑh��"��]�^j.�� �dш�`A��jt�X0 al�:9 &��ӪN@J �GiHM��p�f,��1�B, ��a��x���<�'o�����w�����w�����w���0<�� 1��p|�\5�љ D��Ɉ�At�x�STh��F��%&ʞ��X���A
ӕ�jӅ��+DՉ�X���Z��\X�D1ms�X�M^��4|W:Ջ(YТB��B(�2T_`���t,��mH�M1l.�0Vr�j�*J�+KV1$`���_`�D���e��вy�$!�(B�� �#e�Fa�Z ��lV��:�����#�A����86�r ��%�`d�T 4�_�N��������^�(Ev��t�YR>Td����y�� L\3p� �ɣG �.�X#�����ӃƋ� S�ML���^���q+�T��B��<pF7dv� 6Q�\�f��eSi���O&��q7dݓV�^r�Y�N�zgT�Ty3�O����e1���>��U��H�gP��L}3)*IL�[�������*^����f��� /L����^x��^x�D��x��6Q�&d�Y(h��L�e�8KD�-�n�%`G&bV�K����'@Ih��B�&��T����^v��@�JAk �0����|�/ ���4�HH!| � ��9��l� �l� �r�ah݉���iȴp|�T5>l(�:j*�6M�
Fg�EcEiL��LALy(�3���,L�]351p�nf|���t�.�*7�f�:ŋ 簳���{=��g����{=��g����{=��g���xe��vC�s���7���O��d��D�M�I���LUT*!T^����h�eX�c֘,�1Zu����X�W=��^^�s 3�WY0� ��0<�&/{&$4_a�yG��k� 3q;��8����r��X �u�q^�����)�,�����\dhB����/&E'�C������$)&F2(<FD4"*.!ID��Pk >�'�m��N d>�2prF/27l]>-!�)�cyz�6� f��5bm7t��c�7�̚/�8`ᣆ͚�4<l�тUʪ��n�zc��N�;j\X���W�<���'#�f�=���gggggggggggggggggggggggggggggggggggggggggggggggggg�d��l�FS<᳇�4l|ݓV�ZH�UES�N��z�jw���d��ÚW�0T}c�2���jU�'�R���ǔ�:������8e2��eED 63���`��X���N��&t��Y��ѸP�� Ѳ��Z&�:D�"�l �"�.)d��v��+XOF}�^�G�6�#�V�\�VU1�.x����&�୸,H-Z�kT����^�x�/ �A� �c�3�!�����nndr:9�Ӑ� fa�l/�H6N�f+��$2���f/�M��@� &����8���0zR������- G���A�R����n����E"i��Dk�����l>v����f�<� 4x!���8 �!�P'� ��`,�4MB�>��������P\T�()6Vd�UVb�.��S�J��Zn��j����+H+��(mB�W�?b�r�˗� ����>t���R.��bG� �g�HH�c�`��?�������{����w�����c����f,����hG�a=�����Z��,1Z�c���,�zPu�9�(g�HBLB2"�8ԝ98�L"��2 �XԈ#�CB�����4 `�0 B�1%�� �@%H$f:�� r��0_�i���Za�b������w�+�X�+��ݑl�ʼn�������4\j�����#�^����8f�9������6h��:eG��X��q�l�`����<ۊ֭^��P/v�| 6I��:� 5��y��驧3��8y�fk�1R�I�*uI�+US�===<敔󚇨z�
���̤i3'(zD)V%��uC��N�fS0L}+��Lʗ�z�U9�y!�P�N�[��JN��F����OE#>��7 eL��e �F�%+�)t��.��C���%DfK�-#,yS���c��ϴ� D-1zv�������D 4� *SDªR3p�/d~�G�B�@t|� �p�6�]6�\9�H7Jy �j�Ax��QhՉ��ht�+3�؜�M�� �Hh���D��H�r�&�6J���;'
S�C����b٣&���c�0v���Y��!�'��&��fã9������BSE5&j���K�&<��3��z������� 8�i�1^}X��U���px���� �0u�L]:|�B��.���� ��Ͻ��!�k�!�gT��C�E�ò�i���*^���-_���C�ē����d:�{!��@��F �3���2NJ�����p�'`N�� �FGK P�� �����2��JA@�Hi�停zм�_dY�q������r���c�Sv&�X��7�17��d�����GL�2i3�^�� \SR�é��������+������{(\:z�Ň�=�sH|�i6q#)9t���͏�,Pʪ����֧zgT�L�E��\OJ�˧.�qC�=S*���e%D��I�;�jiP�v �Ny#�0J�+i�LyC��R�,��!p�Z��3t��w��u7 $n��%�%���,J����'��[�$8$2%:$:Z�[E.<��+�*d��+N�e��q�l��n�: @�Q���+f�~$�8�""��� ̍��l88X�z�8G�$� �Qlݓqh�6 EÉ��f"��􃴂i���9x�P�9�s����'P��)�����aѺu�e�c�"SQp�9��a͇w��a�����\<$@��B���æB��~4�O�D9U8�X��P���KӘ�T�:��@�Rd���e"Y�� �)1Z���ub���W-b!�`��]u�y�:|��Z>&@��S���c�ZD��1�f�1�� �)@J�4��@3
�)e�w:��XΝf��� S� L�MϓV|��'�1Cї�ND0&���!&(�T��$��X� �C�iaXt+.'b0Y�EZ��G��� $8h�V�� ��1q��"�ų�� ��d��lBf�� �ӓ�W��NN��9^m6Xpx��vM�5������2�����Z�u����b���q��_]y�[ue��P�͍b���vHɤҙԌ��͘%p����UR�IՌ��qA�'�/J�+)'�p����J��wTTS2���j�N7�ԽM;쩧q*�&d����T�K�8��k�I�씶V�L�R�s#��%y3c�.#<K(��T�Y���jĕCh��Jl8��h���3>3>V�I�yS��<���3�n"�i�X�cTD����6 ,q�A@��oώCp~��?1%�Lt�)���M�􃴬R�NN��]H:3p�nj�Q���|݁����x�#�G��0H�zd��*L��t��-T��wL��"����9<p�܈��xl[�by��,�C CG� ��M �R�@p��+�M0Vj��s'US�NAWN^��r
��/T�d�G�Ypz��NJζ=cb:\up��/uא:txt�zt���O��H]d~��a�y,R�q�� ��X&i�( ��C{���.�� �߆9 ��6y�@f �� ��x���1�$d�#�s��9C��;�F.�� �)),D2:2h�yr�G > 4�����p|0b@dx����cw��� ����9>��Jc�����]IJ���fN\9^m8p����V=1��u��uq�����`���`㌞u����, >F}� !?͋b�ι�wT�k��8���4Bnx�"��eI�ONuUC��OOMOR}===;���O6�e#g$�2�l�g�X�rɻ�X%Br�vM�j�9�FR�n��)L�ÉV��_�"�6H�A�� ��5Z2tF@6"V�[cV�q�g�9/��DS�SbSch١���� �-p`�[�,yd��)$l�h�H�m2�$Lo\� ��� ���
��  ��h�E�P�1����Ax[ E��x�^ )&N>J���'����vr�A�A
r=9y��hƢ��X�Ń0� ��ӑ���6 ����RLf�p��0���A��%�seg#�� ��fr;H �i�aѨ6���_���� =�N�� 5���w�-���~5��X4 ���/(0 d�9Ji��FIЧ2V(�09 QɂqIY�w�1R,*6Vr�uCŪF�C��'+B��*�&�8� 0y�B�y��:vH���!�.@L�bg�G��;�`�w�����ޫ���z^Ǟ��^�=���w�w������l�(�����T�'^���N*b���V�.N�� �ecϒ��� R!�- A!jt"Ia 8$�����fN���4N6F��(� AXt+JIJ����A��hr' Xv��85��(al�sxB?��>���@d8>�]3h���T�US�MNu;�RҰLy+ӽM9�쩥u*Ó�k���T6�������c{�W=}�q֮u��m�PH݁fİ=�\���TΦ�2jѫI�:����&���������eK��OONꇥp��Ç �2���NO'^pɫ�.�6���6�ͩ�7t��Z9p偵%*ӆ`Y��R)#���-��8��WW�� 1�h��`����4��H�$86ll��\���b�����;��'@K#d��TM��h��'��L�>t��+�3'
�w��
�(`���%M�b��x�@p�"L\ �C��Cĩ�'d���Ӓ
JB�ӑ�F'&)ؤ29:hbht̀jɨ���sT���L���)�j�+MN��
'z��T��R<���F)$u!)���&���a�0=}�ӧ�Y� @l��� 2�0���)�5J�se �3J�9�W�0N�%���ՐU��������M�V8\�õά�<�t��Go<���2@u�PGgX�9ώO�>:@�����a�y�qX�B�A�KkCQ偈��s�C![0�b�a�u�C$������ ��`�#\HdD$a��HC�u"y s"<�H":L4Ft�� AA\���Ҳ��JHʏ�)@4p`�E��3�??���@�La0�����1``��4&.'X�������s�N��b����T�P�u�j(^���+qk�\q��Z}i�̸���p��؞�e}ۭ��Av��HW�| 6��{�Y�f��#X�w�>��vMZm��U8����'�T8���.'��������e+)\6@������d��כ<�zvN�h���T�p|��oJ�Zv �4��k��n�I\'`V�Z��Y��e �Y,pg�-P1d�j��i2O22ph��yk"+�+@0`Z���'��)<��S(�F�,���E!h���.}��U� �@E���W��hm%҆�Ȯ^ѐ�d#�<�iP/�A�s%��������P9�7���.J?8��F�ɀ�6�2Ԏԗ�N�]01J@J�1���N,Nd�j�%Nf���
��&H?L�0� ��xl��t������}�,�#�%�d!��e�h�L/NL���)��O� ���<��X������8���]Y��5Y���NU��i<�#a�JU�q����� ^��Ϻ롿v� ��u
H���c�"%!�7;U��g�g7o�6�;vevv�?��������۳�1^�z�R�;v(ݾ�O�݊=}�_�ŮÇ�)�X�hf/J�ŊV8�ckW�b #,W�c�Ɖ�� 1��JPj"+"@���4 �h��� Q�R� �%.$>J4$ Db))18�N3'JQ���Ƥ�hĒ�}�Pfp
��d� k�ӌ�eS1�<���L�0�02>`����OMP�;��SS�MPuI�Pʇ`���6��(qc�V�>��.0^�s�=�,O8��b��v��̅î5!e��P@�a����kۄ�Py3�4n�j�ʙT��U-R�5J��Ԭ�q3�R�OOON�zVNi2�aÇ �Bp�Tͦe3&���:n�i���08>r��' �@��) Y�X"^E%q��rgIY*��b�C$� ��:4tiI�+li-d���·I�,l�����8X�J��CEu��(h��TN�y��.��{���[aa{`� ���?��Ҋg/9���'�
f�s�#ӄ�MNA8<r@9t��r���%)�Zs$Τ46bllnĂrAt���+)L/2R�j���T�S,8���
�*ޡ��(q1�#L�"4��L�4 6 ��:x� 5��d��|Ad~;�//0N��#ә�!9/Vu8�-(�KҎ�ӏԎӽ(�[ԎձR;\�æ��Jm��<��s�+N��������tn����ן!�:B�!����C��4$t�ӬG�O::t룇^����E�']؝tR`�����C�ӬC���Ӭ]���W�щ�CIӮ�d��B��� c�t4{�ju���Ѱd.�a�v�u�{�)Z�X�k�%�V�ְtl����|;\��,�^}�,�����χ�'��O $4[LPV��dr0�Hx�8��%HΑ �r�B���I��':H�vIؕ-�#�1���@<��J&/3d͓��&' �<ґJ��^���zZf)��b��� TV�]]uuuus�>ۊO� Z�j��r����1{3��{6]fu��.!qHO!`��,��`؞���k��#)9y�IO�z�lV2��ji���8n᳆�<�y�'3f��j��㗜��×�2p���&M�pє��L�(��/t�� O0Hѵ#�6p��Gi)���wΊgE�c"�p<? ��y��t6�����xj���r>��ed"��<k�'xWOp�V�@t!��Ȏ�@��b�A�� ���&t �0��ž �B/A�� ��x0H0H0HBP��+(�1WBt�c Bt���#u$R)"�W P�1����T��v��&K\-d��兤e�K�(��8R���ťN8N�S%NQ��†ɞP�����y�]z�Yaaaa�n��

799
SampleScenes/HDTest/SkyFogTest.unity
文件差异内容过多而无法显示
查看文件

4
SampleScenes/HDTest/SkyFogTest/Rough_Refraction_Transparent.mat


- _ZTestMode: 8
- _ZWrite: 0
m_Colors:
- _BaseColor: {r: 1, g: 0, b: 0, a: 1}
- _Color: {r: 1, g: 0, b: 0, a: 1}
- _BaseColor: {r: 1, g: 0, b: 0, a: 0.3647059}
- _Color: {r: 1, g: 0, b: 0, a: 0.3647059}
- _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
- _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}

60
ScriptableRenderPipeline/Core/CoreRP/Editor/CoreEditorUtils.cs


using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

}
return group.isExpanded;
}
static readonly GUIContent[] k_DrawVector6Slider_LabelPositives =
{
new GUIContent("+X"),
new GUIContent("+Y"),
new GUIContent("+Z"),
};
static readonly GUIContent[] k_DrawVector6Slider_LabelNegatives =
{
new GUIContent("-X"),
new GUIContent("-Y"),
new GUIContent("-Z"),
};
const int k_DrawVector6Slider_LabelSize = 60;
const int k_DrawVector6Slider_FieldSize = 80;
public static void DrawVector6Slider(GUIContent label, SerializedProperty positive, SerializedProperty negative, Vector3 min, Vector3 max)
{
GUILayout.BeginVertical();
EditorGUILayout.LabelField(label);
++EditorGUI.indentLevel;
var rect = GUILayoutUtility.GetRect(0, float.MaxValue, EditorGUIUtility.singleLineHeight, EditorGUIUtility.singleLineHeight);
var v = positive.vector3Value;
EditorGUI.BeginChangeCheck();
v = DrawVector3Slider(rect, k_DrawVector6Slider_LabelPositives, v, min, max);
if (EditorGUI.EndChangeCheck())
positive.vector3Value = v;
GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
rect = GUILayoutUtility.GetRect(0, float.MaxValue, EditorGUIUtility.singleLineHeight, EditorGUIUtility.singleLineHeight);
v = negative.vector3Value;
EditorGUI.BeginChangeCheck();
v = DrawVector3Slider(rect, k_DrawVector6Slider_LabelNegatives, v, min, max);
if (EditorGUI.EndChangeCheck())
negative.vector3Value = v;
--EditorGUI.indentLevel;
GUILayout.EndVertical();
}
static Vector3 DrawVector3Slider(Rect rect, GUIContent[] labels, Vector3 value, Vector3 min, Vector3 max)
{
// Use a corrected width due to the hacks used for layouting the slider properly below
rect.width -= 20;
var fieldWidth = rect.width / 3f;
for (var i = 0; i < 3; ++i)
{
var c = new Rect(rect.x + fieldWidth * i, rect.y, fieldWidth, rect.height);
var labelRect = new Rect(c.x, c.y, k_DrawVector6Slider_LabelSize, c.height);
var sliderRect = new Rect(labelRect.x + labelRect.width, c.y, c.width - k_DrawVector6Slider_LabelSize - k_DrawVector6Slider_FieldSize + 45, c.height);
var fieldRect = new Rect(sliderRect.x + sliderRect.width - 25, c.y, k_DrawVector6Slider_FieldSize, c.height);
EditorGUI.LabelField(labelRect, labels[i]);
value[i] = GUI.HorizontalSlider(sliderRect, value[i], min[i], max[i]);
value[i] = EditorGUI.FloatField(fieldRect, value[i]);
}
return value;
}
public static void RemoveMaterialKeywords(Material material)

23
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Camera/HDCamera.cs


public Vector4[] frustumPlaneEquations;
public Camera camera;
public uint taaFrameIndex;
public Vector4 viewParam;
public PostProcessRenderContext postprocessRenderContext;
public Matrix4x4 viewProjMatrix

isFirstFrame = false;
const uint taaFrameCount = 8;
taaFrameIndex = taaEnabled ? (uint)Time.renderedFrameCount % taaFrameCount : 0;
taaFrameIndex = taaEnabled ? (uint)Time.renderedFrameCount % taaFrameCount : 0;
}
else
{

nonJitteredProjMatrix = gpuNonJitteredProj;
cameraPos = pos;
screenSize = new Vector4(camera.pixelWidth, camera.pixelHeight, 1.0f / camera.pixelWidth, 1.0f / camera.pixelHeight);
viewParam = new Vector4(viewMatrix.determinant, 0.0f, 0.0f, 0.0f);
if (ShaderConfig.s_CameraRelativeRendering != 0)
{

cmd.SetGlobalMatrix(HDShaderIDs._NonJitteredViewProjMatrix, nonJitteredViewProjMatrix);
cmd.SetGlobalMatrix(HDShaderIDs._ViewProjMatrix, viewProjMatrix);
cmd.SetGlobalMatrix(HDShaderIDs._InvViewProjMatrix, viewProjMatrix.inverse);
cmd.SetGlobalVector(HDShaderIDs._ViewParam, viewParam);
cmd.SetGlobalVector(HDShaderIDs._InvProjParam, invProjParam);
cmd.SetGlobalVector(HDShaderIDs._ScreenSize, screenSize);
cmd.SetGlobalMatrix(HDShaderIDs._PrevViewProjMatrix, prevViewProjMatrix);

// Does not modify global settings. Used for shadows, low res. rendering, etc.
public void OverrideGlobalParams(Material material)
{
material.SetMatrix(HDShaderIDs._ViewMatrix, viewMatrix);
material.SetMatrix(HDShaderIDs._InvViewMatrix, viewMatrix.inverse);
material.SetMatrix(HDShaderIDs._ProjMatrix, projMatrix);
material.SetMatrix(HDShaderIDs._InvProjMatrix, projMatrix.inverse);
material.SetMatrix(HDShaderIDs._NonJitteredViewProjMatrix, nonJitteredViewProjMatrix);
material.SetMatrix(HDShaderIDs._ViewProjMatrix, viewProjMatrix);
material.SetMatrix(HDShaderIDs._InvViewProjMatrix, viewProjMatrix.inverse);
material.SetVector(HDShaderIDs._InvProjParam, invProjParam);
material.SetVector(HDShaderIDs._ScreenSize, screenSize);
material.SetMatrix(HDShaderIDs._PrevViewProjMatrix, prevViewProjMatrix);
material.SetVectorArray(HDShaderIDs._FrustumPlanes, frustumPlaneEquations);
material.SetInt(HDShaderIDs._TaaFrameIndex, (int)taaFrameIndex);
}
// TODO: We should set all the value below globally and not let it under the control of Unity,
// Need to test that because we are not sure in which order these value are setup, but we need to have control on them, or rename them in our shader.
// For now, apply it for all our compute shader to make it work

cmd.SetComputeVectorParam(cs, HDShaderIDs.unity_OrthoParams, Shader.GetGlobalVector(HDShaderIDs.unity_OrthoParams));
cmd.SetComputeVectorParam(cs, HDShaderIDs._ProjectionParams, Shader.GetGlobalVector(HDShaderIDs._ProjectionParams));
cmd.SetComputeVectorParam(cs, HDShaderIDs._ViewParam, Shader.GetGlobalVector(HDShaderIDs._ViewParam));
cmd.SetComputeVectorParam(cs, HDShaderIDs._ScreenParams, Shader.GetGlobalVector(HDShaderIDs._ScreenParams));
cmd.SetComputeVectorParam(cs, HDShaderIDs._ZBufferParams, Shader.GetGlobalVector(HDShaderIDs._ZBufferParams));
cmd.SetComputeVectorParam(cs, HDShaderIDs._WorldSpaceCameraPos, Shader.GetGlobalVector(HDShaderIDs._WorldSpaceCameraPos));

15
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/HDAssetFactory.cs


get { return HDEditorUtils.GetHDRenderPipelinePath() + "RenderPipelineResources/HDRenderPipelineResources.asset"; }
}
static string s_DefaultMaterialPath
{
get { return HDEditorUtils.GetHDRenderPipelinePath() + "RenderPipelineResources/DefaultHDMaterial.mat"; }
}
static string s_DefaultShaderPath
{
get { return HDEditorUtils.GetHDRenderPipelinePath() + "Material/Lit/Lit.shader"; }
}
class DoCreateNewAssetHDRenderPipeline : ProjectWindowCallback.EndNameEditAction
{
public override void Action(int instanceId, string pathName, string resourceFile)

// Load default renderPipelineResources / Material / Shader
newAsset.renderPipelineResources = AssetDatabase.LoadAssetAtPath<RenderPipelineResources>(s_RenderPipelineResourcesPath);
newAsset.defaultDiffuseMaterial = AssetDatabase.LoadAssetAtPath<Material>(s_DefaultMaterialPath);
newAsset.defaultShader = AssetDatabase.LoadAssetAtPath<Shader>(s_DefaultShaderPath);
AssetDatabase.CreateAsset(newAsset, pathName);
ProjectWindowUtil.ShowCreatedAsset(newAsset);
}

string HDRenderPipelinePath = HDEditorUtils.GetHDRenderPipelinePath();
string PostProcessingPath = HDEditorUtils.GetPostProcessingPath();
string CorePath = HDEditorUtils.GetCorePath();
newAsset.defaultDiffuseMaterial = Load<Material>(HDRenderPipelinePath + "RenderPipelineResources/DefaultHDMaterial.mat");
newAsset.defaultShader = Load<Shader>(HDRenderPipelinePath + "Material/Lit/Lit.shader");
newAsset.debugDisplayLatlongShader = Load<Shader>(HDRenderPipelinePath + "Debug/DebugDisplayLatlong.Shader");
newAsset.debugViewMaterialGBufferShader = Load<Shader>(HDRenderPipelinePath + "Debug/DebugViewMaterialGBuffer.Shader");

4
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/HDEditorUtils.cs


{
var srpPath = GetScriptableRenderPipelinePath();
if (srpPath != null)
return Path.Combine(srpPath, "ScriptableRenderPipeline/Core/CoreRP");
return Path.Combine(srpPath, "ScriptableRenderPipeline/Core/CoreRP/");
return "Packages/com.unity.render-pipelines.core/";
return "Packages/com.unity.render-pipelines.core/CoreRP/";
}
public static bool ResetMaterialKeywords(Material material)

2
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/HDRenderPipelineInspector.Styles.cs


{
public readonly GUIContent defaults = new GUIContent("Defaults");
public readonly GUIContent renderPipelineResources = new GUIContent("Render Pipeline Resources", "Set of resources that need to be loaded when creating stand alone");
public readonly GUIContent defaultDiffuseMaterial = new GUIContent("Default Diffuse Material", "Material to use when creating objects");
public readonly GUIContent defaultShader = new GUIContent("Default Shader", "Shader to use when creating materials");
public readonly GUIContent settingsLabel = new GUIContent("Settings");

20
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/HDRenderPipelineInspector.cs


public sealed partial class HDRenderPipelineInspector : HDBaseEditor<HDRenderPipelineAsset>
{
SerializedProperty m_RenderPipelineResources;
SerializedProperty m_DefaultDiffuseMaterial;
SerializedProperty m_DefaultShader;
// Global Frame Settings
// Global Render settings

void InitializeProperties()
{
m_RenderPipelineResources = properties.Find("m_RenderPipelineResources");
m_DefaultDiffuseMaterial = properties.Find("m_DefaultDiffuseMaterial");
m_DefaultShader = properties.Find("m_DefaultShader");
// Global FrameSettings
// Global Render settings

void SettingsUI(HDRenderPipelineAsset hdAsset)
{
EditorGUILayout.LabelField(s_Styles.settingsLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel++;
GlobalRenderSettingsUI(hdAsset);
GlobalShadowSettingsUI(hdAsset);
GlobalLightLoopSettingsUI(hdAsset);

RendereringSettingsUI(hdAsset);
LightLoopSettingsUI(hdAsset);
EditorGUI.indentLevel--;
EditorGUILayout.Space();
EditorGUILayout.PropertyField(m_SubsurfaceScatteringSettings, s_Styles.sssSettings);
}
protected override void OnEnable()

serializedObject.Update();
EditorGUILayout.LabelField(s_Styles.defaults, EditorStyles.boldLabel);
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(m_DefaultDiffuseMaterial, s_Styles.defaultDiffuseMaterial);
EditorGUILayout.PropertyField(m_DefaultShader, s_Styles.defaultShader);
EditorGUI.indentLevel--;
EditorGUILayout.Space();
EditorGUILayout.PropertyField(m_SubsurfaceScatteringSettings, s_Styles.sssSettings);
EditorGUILayout.Space();
SettingsUI(m_Target);

31
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDReflectionProbeEditor.Data.cs


{
internal class SerializedReflectionProbe
{
internal ReflectionProbe target;
internal HDAdditionalReflectionData targetData;
internal SerializedObject so;
internal SerializedProperty mode;

internal SerializedProperty timeSlicingMode;
internal SerializedProperty intensityMultiplier;
internal SerializedProperty blendDistance;
internal SerializedProperty legacyBlendDistance;
internal SerializedProperty boxSize;
internal SerializedProperty boxOffset;
internal SerializedProperty resolution;

internal SerializedProperty boxReprojectionVolumeSize;
internal SerializedProperty boxReprojectionVolumeCenter;
internal SerializedProperty sphereReprojectionVolumeRadius;
internal SerializedProperty blendDistancePositive;
internal SerializedProperty blendDistanceNegative;
internal SerializedProperty blendNormalDistancePositive;
internal SerializedProperty blendNormalDistanceNegative;
internal SerializedProperty boxSideFadePositive;
internal SerializedProperty boxSideFadeNegative;
target = (ReflectionProbe)so.targetObject;
targetData = target.GetComponent<HDAdditionalReflectionData>();
mode = so.FindProperty("m_Mode");
customBakedTexture = so.FindProperty("m_CustomBakedTexture");

intensityMultiplier = so.FindProperty("m_IntensityMultiplier");
blendDistance = so.FindProperty("m_BlendDistance");
boxSize = so.FindProperty("m_BoxSize");
boxOffset = so.FindProperty("m_BoxOffset");
resolution = so.FindProperty("m_Resolution");

nearClip = so.FindProperty("m_NearClip");
farClip = so.FindProperty("m_FarClip");
boxProjection = so.FindProperty("m_BoxProjection");
legacyBlendDistance = so.FindProperty("m_BlendDistance");
influenceShape = addso.Find((HDAdditionalReflectionData d) => d.influenceShape);
influenceSphereRadius = addso.Find((HDAdditionalReflectionData d) => d.influenceSphereRadius);

sphereReprojectionVolumeRadius = addso.Find((HDAdditionalReflectionData d) => d.sphereReprojectionVolumeRadius);
dimmer = addso.Find((HDAdditionalReflectionData d) => d.dimmer);
blendDistancePositive = addso.Find((HDAdditionalReflectionData d) => d.blendDistancePositive);
blendDistanceNegative = addso.Find((HDAdditionalReflectionData d) => d.blendDistanceNegative);
blendNormalDistancePositive = addso.Find((HDAdditionalReflectionData d) => d.blendNormalDistancePositive);
blendNormalDistanceNegative = addso.Find((HDAdditionalReflectionData d) => d.blendNormalDistanceNegative);
boxSideFadePositive = addso.Find((HDAdditionalReflectionData d) => d.boxSideFadePositive);
boxSideFadeNegative = addso.Find((HDAdditionalReflectionData d) => d.boxSideFadeNegative);
}
}

public void ClearOperation(Operation op) { operations &= ~op; }
public void AddOperation(Operation op) { operations |= op; }
public BoxBoundsHandle boxInfluenceBoundsHandle = new BoxBoundsHandle();
public BoxBoundsHandle boxProjectionBoundsHandle = new BoxBoundsHandle();
public BoxBoundsHandle boxInfluenceHandle = new BoxBoundsHandle();
public BoxBoundsHandle boxProjectionHandle = new BoxBoundsHandle();
public SphereBoundsHandle influenceSphereHandle = new SphereBoundsHandle();
public SphereBoundsHandle projectionSphereHandle = new SphereBoundsHandle();
public BoxBoundsHandle boxBlendNormalHandle = new BoxBoundsHandle();
public SphereBoundsHandle sphereInfluenceHandle = new SphereBoundsHandle();
public SphereBoundsHandle sphereProjectionHandle = new SphereBoundsHandle();
public SphereBoundsHandle sphereBlendNormalHandle = new SphereBoundsHandle();
public Matrix4x4 oldLocalSpace = Matrix4x4.identity;
public bool HasAndClearOperation(Operation op)

128
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDReflectionProbeEditor.Drawers.cs


static readonly CED.IDrawer k_InfluenceVolumeSection = CED.FoldoutGroup(
"Influence volume settings",
(s, p, o) => p.blendDistance,
(s, p, o) => p.blendDistancePositive,
CED.Action(Drawer_DistanceBlend),
CED.FadeGroup(
(s, p, o, i) => s.GetShapeFaded((ReflectionInfluenceShape)i),
false,

p.resolution.intValue = renderPipelineAsset.GetRenderPipelineSettings().lightLoopSettings.reflectionCubemapSize;
EditorGUILayout.LabelField(CoreEditorUtils.GetContent("Resolution"), CoreEditorUtils.GetContent(p.resolution.intValue.ToString()));
EditorGUILayout.PropertyField(p.shadowDistance);
EditorGUILayout.PropertyField(p.cullingMask);
EditorGUILayout.PropertyField(p.useOcclusionCulling);
EditorGUILayout.PropertyField(p.nearClip);
EditorGUILayout.PropertyField(p.farClip);
EditorGUILayout.PropertyField(p.shadowDistance, CoreEditorUtils.GetContent("Shadow Distance"));
EditorGUILayout.PropertyField(p.cullingMask, CoreEditorUtils.GetContent("Culling Mask"));
EditorGUILayout.PropertyField(p.useOcclusionCulling, CoreEditorUtils.GetContent("Use Occlusion Culling"));
EditorGUILayout.PropertyField(p.nearClip, CoreEditorUtils.GetContent("Near Clip"));
EditorGUILayout.PropertyField(p.farClip, CoreEditorUtils.GetContent("Far Clip"));
}
static void Drawer_AdditionalSettings(UIState s, SerializedReflectionProbe p, Editor owner)

if (p.so.targetObjects.Length == 1)
{
var probe = (ReflectionProbe)p.so.targetObject;
var probe = p.target;
if (probe.mode == ReflectionProbeMode.Custom && probe.customBakedTexture != null)
{
var cubemap = probe.customBakedTexture as Cubemap;

{
if (p.mode.intValue == (int)ReflectionProbeMode.Realtime)
{
EditorGUILayout.HelpBox("Baking of this reflection probe should be initiated from the scripting API because the type is 'Realtime'", MessageType.Info);
EditorGUILayout.HelpBox("Refresh of this reflection probe should be initiated from the scripting API because the type is 'Realtime'", MessageType.Info);
if (!QualitySettings.realtimeReflectionProbes)
EditorGUILayout.HelpBox("Realtime reflection probes are disabled in Quality Settings", MessageType.Warning);

{
var mode = (int)data;
var probe = p.so.targetObject as ReflectionProbe;
var probe = p.target;
if (mode == 0)
{
BakeCustomReflectionProbe(probe, false, true);

GUILayout.ExpandWidth(true)))
{
var probe = (ReflectionProbe)p.so.targetObject;
var probe = p.target;
BakeCustomReflectionProbe(probe, true, true);
ResetProbeSceneTextureInMaterial(probe);
GUIUtility.ExitGUI();

case ReflectionProbeMode.Baked:
{
GUI.enabled = ((ReflectionProbe)p.so.targetObject).enabled;
GUI.enabled = p.target.enabled;
// Bake button in non-continous mode
if (ButtonWithDropdownList(

},
GUILayout.ExpandWidth(true)))
{
var probe = (ReflectionProbe)p.so.targetObject;
var probe = p.target;
BakeReflectionProbeSnapshot(probe);
ResetProbeSceneTextureInMaterial(probe);
GUIUtility.ExitGUI();

}
#region Influence Volume
static void Drawer_DistanceBlend(UIState s, SerializedReflectionProbe p, Editor owner)
{
EditorGUILayout.Slider(p.blendDistance, 0, CalculateMaxBlendDistance(s, p, owner), CoreEditorUtils.GetContent("Blend Distance|Area around the probe where it is blended with other probes. Only used in deferred probes."));
EditorGUI.BeginChangeCheck();
}
var maxBlendDistance = CalculateBoxMaxBlendDistance(s, p, owner);
CoreEditorUtils.DrawVector6Slider(
CoreEditorUtils.GetContent("Blend Distance|Area around the probe where it is blended with other probes. Only used in deferred probes."),
p.blendDistancePositive, p.blendDistanceNegative, Vector3.zero, maxBlendDistance);
CoreEditorUtils.DrawVector6Slider(
CoreEditorUtils.GetContent("Blend Normal Distance|Area around the probe where the normals influence the probe. Only used in deferred probes."),
p.blendNormalDistancePositive, p.blendNormalDistanceNegative, Vector3.zero, maxBlendDistance);
CoreEditorUtils.DrawVector6Slider(
CoreEditorUtils.GetContent("Face fade|Fade faces of the cubemap."),
p.boxSideFadePositive, p.boxSideFadeNegative, Vector3.zero, Vector3.one);
EditorGUILayout.Space();
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(p.boxSize, CoreEditorUtils.GetContent("Box Size|The size of the box in which the reflections will be applied to objects. The value is not affected by the Transform of the Game Object."));
EditorGUILayout.PropertyField(p.boxOffset, CoreEditorUtils.GetContent("Box Offset|The center of the box in which the reflections will be applied to objects. The value is relative to the position of the Game Object."));

{
var center = p.boxOffset.vector3Value;
var size = p.boxSize.vector3Value;
if (ValidateAABB((ReflectionProbe)p.so.targetObject, ref center, ref size))
if (ValidateAABB(p.target, ref center, ref size))
{
p.boxOffset.vector3Value = center;
p.boxSize.vector3Value = size;

static void Drawer_InfluenceSphereSettings(UIState s, SerializedReflectionProbe p, Editor owner)
{
var maxBlendDistance = CalculateSphereMaxBlendDistance(s, p, owner);
var blendDistance = p.blendDistancePositive.vector3Value.x;
EditorGUI.BeginChangeCheck();
blendDistance = EditorGUILayout.Slider(CoreEditorUtils.GetContent("Blend Distance|Area around the probe where it is blended with other probes. Only used in deferred probes."), blendDistance, 0, maxBlendDistance);
if (EditorGUI.EndChangeCheck())
{
p.blendDistancePositive.vector3Value = Vector3.one * blendDistance;
p.blendDistanceNegative.vector3Value = Vector3.one * blendDistance;
}
var blendNormalDistance = p.blendNormalDistancePositive.vector3Value.x;
EditorGUI.BeginChangeCheck();
blendNormalDistance = EditorGUILayout.Slider(CoreEditorUtils.GetContent("Blend Normal Distance|Area around the probe where the normals influence the probe. Only used in deferred probes."), blendNormalDistance, 0, maxBlendDistance);
if (EditorGUI.EndChangeCheck())
{
p.blendNormalDistancePositive.vector3Value = Vector3.one * blendNormalDistance;
p.blendNormalDistanceNegative.vector3Value = Vector3.one * blendNormalDistance;
}
EditorGUILayout.PropertyField(p.influenceSphereRadius, CoreEditorUtils.GetContent("Radius"));
EditorGUILayout.PropertyField(p.boxProjection, CoreEditorUtils.GetContent("Sphere Projection|Sphere projection causes reflections to appear to change based on the object's position within the probe's sphere, while still using a single probe as the source of the reflection. This works well for reflections on objects that are moving through enclosed spaces such as corridors and rooms. Setting sphere projection to False and the cubemap reflection will be treated as coming from infinitely far away. Note that this feature can be globally disabled from Graphics Settings -> Tier Settings"));
}

static readonly EditMode.SceneViewEditMode[] k_Toolbar_SceneViewEditModes =
{
EditMode.SceneViewEditMode.ReflectionProbeBox,
//EditMode.SceneViewEditMode.GridBox,
EditMode.SceneViewEditMode.GridBox,
EditMode.SceneViewEditMode.Collider,
EditMode.SceneViewEditMode.ReflectionProbeOrigin
};
static GUIContent[] s_Toolbar_Contents = null;

{
return s_Toolbar_Contents ?? (s_Toolbar_Contents = new []
{
EditorGUIUtility.IconContent("EditCollider", "|Modify the influence volume of the reflection probe."),
//EditorGUIUtility.IconContent("PreMatCube", "|Modify the projection volume of the reflection probe."),
EditorGUIUtility.IconContent("EditCollider", "|Modify the extents of the reflection probe. (SHIFT+1)"),
EditorGUIUtility.IconContent("PreMatCube", "|Modify the influence volume of the reflection probe. (SHIFT+2)"),
EditorGUIUtility.IconContent("SceneViewOrtho", "|Modify the influence normal volume of the reflection probe. (SHIFT+3)"),
EditorGUIUtility.IconContent("MoveTool", "|Move the selected objects.")
});
}

GUI.changed = false;
var oldEditMode = EditMode.editMode;
Func<Bounds> getBounds = () =>
{
var bounds = new Bounds();
foreach (var targetObject in p.so.targetObjects)
{
var rp = (ReflectionProbe)targetObject;
var b = rp.bounds;
bounds.Encapsulate(b);
}
return bounds;
};
EditMode.DoInspectorToolbar(k_Toolbar_SceneViewEditModes, toolbar_Contents, getBounds, owner);
EditMode.DoInspectorToolbar(k_Toolbar_SceneViewEditModes, toolbar_Contents, GetBoundsGetter(p), owner);
//if (GUILayout.Button(EditorGUIUtility.IconContent("Navigation", "|Fit the reflection probe volume to the surrounding colliders.")))
// s.AddOperation(Operation.FitVolumeToSurroundings);

switch (EditMode.editMode)
{
case EditMode.SceneViewEditMode.ReflectionProbeOrigin:
s.UpdateOldLocalSpace((ReflectionProbe)p.so.targetObject);
s.UpdateOldLocalSpace(p.target);
break;
}
}

}
static Func<Bounds> GetBoundsGetter(SerializedReflectionProbe p)
{
return () =>
{
var bounds = new Bounds();
foreach (var targetObject in p.so.targetObjects)
{
var rp = (ReflectionProbe)targetObject;
var b = rp.bounds;
bounds.Encapsulate(b);
}
return bounds;
};
}
#endregion
#region Mode Specific Settings

}
#endregion
static float CalculateMaxBlendDistance(UIState s, SerializedReflectionProbe p, Editor o)
static float CalculateSphereMaxBlendDistance(UIState s, SerializedReflectionProbe p, Editor o)
var shape = (ReflectionInfluenceShape)p.influenceShape.intValue;
switch (shape)
{
case ReflectionInfluenceShape.Sphere:
return p.influenceSphereRadius.floatValue * 0.5f;
default:
case ReflectionInfluenceShape.Box:
{
var size = p.boxSize.vector3Value;
var v = Mathf.Min(size.x, Mathf.Min(size.y, size.z));
return v * 0.5f;
}
}
return p.influenceSphereRadius.floatValue;
}
static Vector3 CalculateBoxMaxBlendDistance(UIState s, SerializedReflectionProbe p, Editor o)
{
return p.boxSize.vector3Value * 0.5f;
}
static MethodInfo k_EditorGUI_ButtonWithDropdownList = typeof(EditorGUI).GetMethod("ButtonWithDropdownList", BindingFlags.Static | BindingFlags.NonPublic, null, CallingConventions.Any, new [] { typeof(GUIContent), typeof(string[]), typeof(GenericMenu.MenuFunction2), typeof(GUILayoutOption[]) }, new ParameterModifier[0]);

464
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDReflectionProbeEditor.Handles.cs


using System;
using UnityEditor.IMGUI.Controls;
using UnityEditorInternal;
using UnityEngine;
using UnityEngine.Experimental.Rendering;

{
partial class HDReflectionProbeEditor
{
internal static Color k_GizmoReflectionProbe = new Color(0xFF / 255f, 0xE5 / 255f, 0x94 / 255f, 0x20 / 255f);
internal static Color k_GizmoReflectionProbeDisabled = new Color(0x99 / 255f, 0x89 / 255f, 0x59 / 255f, 0x10 / 255f);
internal static Color k_GizmoHandleReflectionProbe = new Color(0xFF / 255f, 0xE5 / 255f, 0xAA / 255f, 0xFF / 255f);
enum InfluenceType
{
Standard,
Normal
}
internal static Color k_GizmoThemeColorExtent = new Color(255f / 255f, 229f / 255f, 148f / 255f, 80f / 255f);
internal static Color k_GizmoThemeColorExtentFace = new Color(255f / 255f, 229f / 255f, 148f / 255f, 45f / 255f);
internal static Color k_GizmoThemeColorInfluenceBlend = new Color(83f / 255f, 255f / 255f, 95f / 255f, 75f / 255f);
internal static Color k_GizmoThemeColorInfluenceBlendFace = new Color(83f / 255f, 255f / 255f, 95f / 255f, 17f / 255f);
internal static Color k_GizmoThemeColorInfluenceNormalBlend = new Color(0f / 255f, 229f / 255f, 255f / 255f, 80f / 255f);
internal static Color k_GizmoThemeColorInfluenceNormalBlendFace = new Color(0f / 255f, 229f / 255f, 255f / 255f, 36f / 255f);
internal static Color k_GizmoThemeColorProjection = new Color(0x00 / 255f, 0xE5 / 255f, 0xFF / 255f, 0x20 / 255f);
internal static Color k_GizmoThemeColorProjectionFace = new Color(0x00 / 255f, 0xE5 / 255f, 0xFF / 255f, 0x20 / 255f);
internal static Color k_GizmoThemeColorDisabled = new Color(0x99 / 255f, 0x89 / 255f, 0x59 / 255f, 0x10 / 255f);
internal static Color k_GizmoThemeColorDisabledFace = new Color(0x99 / 255f, 0x89 / 255f, 0x59 / 255f, 0x10 / 255f);
void OnSceneGUI()
{

BakeRealtimeProbeIfPositionChanged(s, p, o);
DoShortcutKey(p, o);
if (!s.sceneViewEditing)
return;

switch (EditMode.editMode)
{
// Influence editing
if (p.influenceShape.enumValueIndex == 0)
Handle_InfluenceBoxEditing(s, p, o);
if (p.influenceShape.enumValueIndex == 1)
Handle_InfluenceSphereEditing(s, p, o);
Handle_InfluenceEditing(s, p, o);
// Influence fade editing
if (p.influenceShape.enumValueIndex == 0)
Handle_ProjectionBoxEditing(s, p, o);
if (p.influenceShape.enumValueIndex == 1)
Handle_ProjectionSphereEditing(s, p, o);
Handle_InfluenceFadeEditing(s, p, o, InfluenceType.Standard);
break;
// Influence normal fade editing
case EditMode.SceneViewEditMode.Collider:
Handle_InfluenceFadeEditing(s, p, o, InfluenceType.Normal);
// Origin editing
case EditMode.SceneViewEditMode.ReflectionProbeOrigin:
Handle_OriginEditing(s, p, o);
break;

Repaint();
void BakeRealtimeProbeIfPositionChanged(UIState s, SerializedReflectionProbe sp, Editor o)
static void Handle_InfluenceFadeEditing(UIState s, SerializedReflectionProbe sp, Editor o, InfluenceType influenceType)
if (Application.isPlaying
|| ((ReflectionProbeMode)sp.mode.intValue) != ReflectionProbeMode.Realtime)
BoxBoundsHandle blendBox;
SphereBoundsHandle sphereHandle;
Vector3 probeBlendDistancePositive, probeBlendDistanceNegative;
Color color;
switch (influenceType)
m_PositionHash = 0;
return;
default:
case InfluenceType.Standard:
{
blendBox = s.boxBlendHandle;
sphereHandle = s.sphereBlendHandle;
probeBlendDistancePositive = sp.targetData.blendDistancePositive;
probeBlendDistanceNegative = sp.targetData.blendDistanceNegative;
color = k_GizmoThemeColorInfluenceBlend;
break;
}
case InfluenceType.Normal:
{
blendBox = s.boxBlendNormalHandle;
sphereHandle = s.sphereBlendNormalHandle;
probeBlendDistancePositive = sp.targetData.blendNormalDistancePositive;
probeBlendDistanceNegative = sp.targetData.blendNormalDistanceNegative;
color = k_GizmoThemeColorInfluenceNormalBlend;
break;
}
var hash = 0;
for (var i = 0; i < sp.so.targetObjects.Length; i++)
{
var p = (ReflectionProbe)sp.so.targetObjects[i];
var tr = p.GetComponent<Transform>();
hash ^= tr.position.GetHashCode();
}
if (hash != m_PositionHash)
var mat = Handles.matrix;
var col = Handles.color;
Handles.matrix = GetLocalSpace(sp.target);
switch ((ReflectionInfluenceShape)sp.influenceShape.enumValueIndex)
m_PositionHash = hash;
for (var i = 0; i < sp.so.targetObjects.Length; i++)
case ReflectionInfluenceShape.Box:
var p = (ReflectionProbe)sp.so.targetObjects[i];
p.RenderProbe();
}
}
}
blendBox.center = sp.target.center - (probeBlendDistancePositive - probeBlendDistanceNegative) * 0.5f;
blendBox.size = sp.target.size - probeBlendDistancePositive - probeBlendDistanceNegative;
static void Handle_InfluenceBoxEditing(UIState s, SerializedReflectionProbe sp, Editor o)
{
var p = (ReflectionProbe)sp.so.targetObject;
Handles.color = k_GizmoThemeColorExtent;
EditorGUI.BeginChangeCheck();
Handles.color = color;
blendBox.DrawHandle();
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(sp.target, "Modified Reflection Probe Influence");
Undo.RecordObject(sp.targetData, "Modified Reflection Probe Influence");
using (new Handles.DrawingScope(GetLocalSpace(p)))
{
s.boxInfluenceBoundsHandle.center = p.center;
s.boxInfluenceBoundsHandle.size = p.size;
s.boxBlendHandle.center = p.center;
s.boxBlendHandle.size = p.size - Vector3.one * p.blendDistance * 2;
var center = sp.target.center;
var influenceSize = sp.target.size;
EditorGUI.BeginChangeCheck();
s.boxInfluenceBoundsHandle.DrawHandle();
var influenceChanged = EditorGUI.EndChangeCheck();
EditorGUI.BeginChangeCheck();
s.boxBlendHandle.DrawHandle();
if (influenceChanged || EditorGUI.EndChangeCheck())
var diff = 2 * (blendBox.center - center);
var sum = influenceSize - blendBox.size;
var positive = (sum - diff) * 0.5f;
var negative = (sum + diff) * 0.5f;
var blendDistancePositive = Vector3.Max(Vector3.zero, Vector3.Min(positive, influenceSize));
var blendDistanceNegative = Vector3.Max(Vector3.zero, Vector3.Min(negative, influenceSize));
probeBlendDistancePositive = blendDistancePositive;
probeBlendDistanceNegative = blendDistanceNegative;
ApplyConstraintsOnTargets(s, sp, o);
EditorUtility.SetDirty(sp.target);
EditorUtility.SetDirty(sp.targetData);
}
break;
}
case ReflectionInfluenceShape.Sphere:
Undo.RecordObject(p, "Modified Reflection Probe AABB");
var center = s.boxInfluenceBoundsHandle.center;
var influenceSize = s.boxInfluenceBoundsHandle.size;
var blendSize = s.boxBlendHandle.size;
ValidateAABB(p, ref center, ref influenceSize);
var blendDistance = influenceChanged
? p.blendDistance
: ((influenceSize.x - blendSize.x) * 0.5f + (influenceSize.y - blendSize.y) * 0.5f + (influenceSize.z - blendSize.z) * 0.5f) / 3;
p.center = center;
p.size = influenceSize;
p.blendDistance = Mathf.Max(blendDistance, 0);
EditorUtility.SetDirty(p);
sphereHandle.center = sp.target.center;
sphereHandle.radius = Mathf.Clamp(sp.targetData.influenceSphereRadius - probeBlendDistancePositive.x, 0, sp.targetData.influenceSphereRadius);
Handles.color = k_GizmoThemeColorExtent;
EditorGUI.BeginChangeCheck();
Handles.color = color;
sphereHandle.DrawHandle();
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(sp.target, "Modified Reflection influence volume");
Undo.RecordObject(sp.targetData, "Modified Reflection influence volume");
var influenceRadius = sp.targetData.influenceSphereRadius;
var blendRadius = sphereHandle.radius;
var blendDistance = Mathf.Clamp(influenceRadius - blendRadius, 0, influenceRadius);
probeBlendDistancePositive = Vector3.one * blendDistance;
probeBlendDistanceNegative = probeBlendDistancePositive;
ApplyConstraintsOnTargets(s, sp, o);
EditorUtility.SetDirty(sp.target);
EditorUtility.SetDirty(sp.targetData);
}
break;
}
Handles.matrix = mat;
Handles.color = col;
static void Handle_ProjectionBoxEditing(UIState s, SerializedReflectionProbe sp, Editor o)
{
var p = (ReflectionProbe)sp.so.targetObject;
var reflectionData = p.GetComponent<HDAdditionalReflectionData>();
using (new Handles.DrawingScope(GetLocalSpace(p)))
switch (influenceType)
s.boxProjectionBoundsHandle.center = reflectionData.boxReprojectionVolumeCenter;
s.boxProjectionBoundsHandle.size = reflectionData.boxReprojectionVolumeSize;
EditorGUI.BeginChangeCheck();
s.boxProjectionBoundsHandle.DrawHandle();
if (EditorGUI.EndChangeCheck())
default:
case InfluenceType.Standard:
Undo.RecordObject(reflectionData, "Modified Reflection Probe AABB");
var center = s.boxProjectionBoundsHandle.center;
var size = s.boxProjectionBoundsHandle.size;
ValidateAABB(p, ref center, ref size);
reflectionData.boxReprojectionVolumeCenter = center;
reflectionData.boxReprojectionVolumeSize = size;
EditorUtility.SetDirty(reflectionData);
sp.targetData.blendDistancePositive = probeBlendDistancePositive;
sp.targetData.blendDistanceNegative = probeBlendDistanceNegative;
break;
}
case InfluenceType.Normal:
{
sp.targetData.blendNormalDistancePositive = probeBlendDistancePositive;
sp.targetData.blendNormalDistanceNegative = probeBlendDistanceNegative;
break;
static void Handle_InfluenceSphereEditing(UIState s, SerializedReflectionProbe sp, Editor o)
static void Handle_InfluenceEditing(UIState s, SerializedReflectionProbe sp, Editor o)
var p = (ReflectionProbe)sp.so.targetObject;
var reflectionData = p.GetComponent<HDAdditionalReflectionData>();
using (new Handles.DrawingScope(GetLocalSpace(p)))
var mat = Handles.matrix;
var col = Handles.color;
Handles.matrix = GetLocalSpace(sp.target);
switch ((ReflectionInfluenceShape)sp.influenceShape.enumValueIndex)
s.influenceSphereHandle.center = p.center;
s.influenceSphereHandle.radius = reflectionData.influenceSphereRadius;
s.sphereBlendHandle.center = p.center;
s.sphereBlendHandle.radius = Mathf.Min(reflectionData.influenceSphereRadius - p.blendDistance * 2, reflectionData.influenceSphereRadius);
EditorGUI.BeginChangeCheck();
s.influenceSphereHandle.DrawHandle();
var influenceChanged = EditorGUI.EndChangeCheck();
EditorGUI.BeginChangeCheck();
s.sphereBlendHandle.DrawHandle();
if (influenceChanged || EditorGUI.EndChangeCheck())
case ReflectionInfluenceShape.Box:
Undo.RecordObject(reflectionData, "Modified Reflection influence volume");
var center = p.center;
var influenceRadius = s.influenceSphereHandle.radius;
var blendRadius = influenceChanged
? Mathf.Max(influenceRadius - p.blendDistance * 2, 0)
: s.sphereBlendHandle.radius;
s.boxInfluenceHandle.center = sp.target.center;
s.boxInfluenceHandle.size = sp.target.size;
var radius = Vector3.one * influenceRadius;
ValidateAABB(p, ref center, ref radius);
influenceRadius = radius.x;
var blendDistance = Mathf.Max(0, (influenceRadius - blendRadius) * 0.5f);
Handles.color = k_GizmoThemeColorExtent;
EditorGUI.BeginChangeCheck();
s.boxInfluenceHandle.DrawHandle();
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(sp.target, "Modified Reflection Probe AABB");
Undo.RecordObject(sp.targetData, "Modified Reflection Probe AABB");
reflectionData.influenceSphereRadius = influenceRadius;
p.blendDistance = blendDistance;
EditorUtility.SetDirty(p);
EditorUtility.SetDirty(reflectionData);
}
}
}
var center = s.boxInfluenceHandle.center;
var size = s.boxInfluenceHandle.size;
static void Handle_ProjectionSphereEditing(UIState s, SerializedReflectionProbe sp, Editor o)
{
var p = (ReflectionProbe)sp.so.targetObject;
var reflectionData = p.GetComponent<HDAdditionalReflectionData>();
ValidateAABB(sp.target, ref center, ref size);
using (new Handles.DrawingScope(GetLocalSpace(p)))
{
s.projectionSphereHandle.center = p.center;
s.projectionSphereHandle.radius = reflectionData.sphereReprojectionVolumeRadius;
sp.target.center = center;
sp.target.size = size;
ApplyConstraintsOnTargets(s, sp, o);
EditorGUI.BeginChangeCheck();
s.projectionSphereHandle.DrawHandle();
if (EditorGUI.EndChangeCheck())
EditorUtility.SetDirty(sp.target);
EditorUtility.SetDirty(sp.targetData);
}
break;
}
case ReflectionInfluenceShape.Sphere:
Undo.RecordObject(reflectionData, "Modified Reflection Probe projection volume");
var center = s.projectionSphereHandle.center;
var radius = s.projectionSphereHandle.radius;
//ValidateAABB(ref center, ref radius);
reflectionData.sphereReprojectionVolumeRadius = radius;
EditorUtility.SetDirty(reflectionData);
s.sphereInfluenceHandle.center = sp.target.center;
s.sphereInfluenceHandle.radius = sp.targetData.influenceSphereRadius;
Handles.color = k_GizmoThemeColorExtent;
EditorGUI.BeginChangeCheck();
s.sphereInfluenceHandle.DrawHandle();
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(sp.target, "Modified Reflection Probe AABB");
Undo.RecordObject(sp.targetData, "Modified Reflection Probe AABB");
var center = sp.target.center;
var influenceRadius = s.sphereInfluenceHandle.radius;
var radius = Vector3.one * influenceRadius;
ValidateAABB(sp.target, ref center, ref radius);
influenceRadius = radius.x;
sp.targetData.influenceSphereRadius = influenceRadius;
ApplyConstraintsOnTargets(s, sp, o);
EditorUtility.SetDirty(sp.target);
EditorUtility.SetDirty(sp.targetData);
}
break;
Handles.matrix = mat;
Handles.color = col;
}
static void Handle_OriginEditing(UIState s, SerializedReflectionProbe sp, Editor o)

static void RenderGizmo(ReflectionProbe reflectionProbe, GizmoType gizmoType)
{
var e = GetEditorFor(reflectionProbe);
if (e == null)
if (e == null || !e.sceneViewEditing)
if (e.sceneViewEditing && EditMode.editMode == EditMode.SceneViewEditMode.ReflectionProbeBox)
switch (EditMode.editMode)
var oldColor = Gizmos.color;
Gizmos.color = k_GizmoReflectionProbe;
Gizmos.matrix = GetLocalSpace(reflectionProbe);
if (reflectionData.influenceShape == ReflectionInfluenceShape.Box)
Gizmos.DrawCube(reflectionProbe.center, -1f * reflectionProbe.size);
if (reflectionData.influenceShape == ReflectionInfluenceShape.Sphere)
Gizmos.DrawSphere(reflectionProbe.center, reflectionData.influenceSphereRadius);
Gizmos.matrix = Matrix4x4.identity;
Gizmos.color = oldColor;
// Influence editing
case EditMode.SceneViewEditMode.ReflectionProbeBox:
Gizmos_Influence(reflectionProbe, reflectionData, e, true);
break;
// Influence fade editing
case EditMode.SceneViewEditMode.GridBox:
Gizmos_InfluenceFade(reflectionProbe, reflectionData, e, InfluenceType.Standard, true);
break;
// Influence normal fade editing
case EditMode.SceneViewEditMode.Collider:
Gizmos_InfluenceFade(reflectionProbe, reflectionData, e, InfluenceType.Normal, true);
break;
}
}

Color oldColor = Gizmos.color;
Gizmos.color = reflectionProbe.isActiveAndEnabled ? k_GizmoReflectionProbe : k_GizmoReflectionProbeDisabled;
if (reflectionData.influenceShape == ReflectionInfluenceShape.Box)
{
DrawBoxInfluenceGizmo(reflectionProbe, oldColor);
}
if (reflectionData.influenceShape == ReflectionInfluenceShape.Sphere)
{
DrawSphereInfluenceGizmo(reflectionProbe, oldColor, reflectionData);
}
if (reflectionData.useSeparateProjectionVolume)
{
DrawReprojectionVolumeGizmo(reflectionProbe, reflectionData);
}
Gizmos.color = oldColor;
Gizmos_Influence(reflectionProbe, reflectionData, null, false);
Gizmos_InfluenceFade(reflectionProbe, reflectionData, null, InfluenceType.Standard, false);
Gizmos_InfluenceFade(reflectionProbe, reflectionData, null, InfluenceType.Normal, false);
ChangeVisibility(reflectionProbe, true);
}

ChangeVisibility(reflectionProbe, false);
}
static void DrawBoxInfluenceGizmo(ReflectionProbe reflectionProbe, Color oldColor)
static void Gizmos_InfluenceFade(ReflectionProbe p, HDAdditionalReflectionData a, Editor e, InfluenceType type, bool isEdit)
Gizmos.matrix = GetLocalSpace(reflectionProbe);
Gizmos.DrawWireCube(reflectionProbe.center, reflectionProbe.size);
if (reflectionProbe.blendDistance > 0)
var col = Gizmos.color;
var mat = Gizmos.matrix;
Vector3 boxCenterOffset;
Vector3 boxSizeOffset;
float sphereRadiusOffset;
Color color;
switch (type)
Gizmos.color = new Color(Gizmos.color.r, Gizmos.color.g, Gizmos.color.b, 0.3f);
Gizmos.DrawWireCube(reflectionProbe.center, new Vector3(reflectionProbe.size.x - reflectionProbe.blendDistance * 2, reflectionProbe.size.y - reflectionProbe.blendDistance * 2, reflectionProbe.size.z - reflectionProbe.blendDistance * 2));
default:
case InfluenceType.Standard:
{
boxCenterOffset = a.boxBlendCenterOffset;
boxSizeOffset = a.boxBlendSizeOffset;
sphereRadiusOffset = a.sphereBlendRadiusOffset;
color = isEdit ? k_GizmoThemeColorInfluenceBlendFace : k_GizmoThemeColorInfluenceBlend;
break;
}
case InfluenceType.Normal:
{
boxCenterOffset = a.boxBlendNormalCenterOffset;
boxSizeOffset = a.boxBlendNormalSizeOffset;
sphereRadiusOffset = a.sphereBlendNormalRadiusOffset;
color = isEdit ? k_GizmoThemeColorInfluenceNormalBlendFace : k_GizmoThemeColorInfluenceNormalBlend;
break;
}
Gizmos.matrix = Matrix4x4.identity;
Gizmos.color = oldColor;
}
static void DrawSphereInfluenceGizmo(ReflectionProbe reflectionProbe, Color oldColor, HDAdditionalReflectionData reflectionData)
{
Gizmos.matrix = GetLocalSpace(reflectionProbe);
Gizmos.DrawWireSphere(reflectionProbe.center, reflectionData.influenceSphereRadius);
if (reflectionProbe.blendDistance > 0)
Gizmos.matrix = GetLocalSpace(p);
switch (a.influenceShape)
Gizmos.color = new Color(Gizmos.color.r, Gizmos.color.g, Gizmos.color.b, 0.3f);
Gizmos.DrawWireSphere(reflectionProbe.center, reflectionData.influenceSphereRadius - 2 * reflectionProbe.blendDistance);
case ReflectionInfluenceShape.Box:
{
Gizmos.color = color;
if (isEdit)
Gizmos.DrawCube(p.center + boxCenterOffset, p.size + boxSizeOffset);
else
Gizmos.DrawWireCube(p.center + boxCenterOffset, p.size + boxSizeOffset);
break;
}
case ReflectionInfluenceShape.Sphere:
{
Gizmos.color = color;
if (isEdit)
Gizmos.DrawSphere(p.center, a.influenceSphereRadius + sphereRadiusOffset);
else
Gizmos.DrawWireSphere(p.center, a.influenceSphereRadius + sphereRadiusOffset);
break;
}
Gizmos.matrix = Matrix4x4.identity;
Gizmos.color = oldColor;
Gizmos.matrix = mat;
Gizmos.color = col;
static void DrawReprojectionVolumeGizmo(ReflectionProbe reflectionProbe, HDAdditionalReflectionData reflectionData)
static void Gizmos_Influence(ReflectionProbe p, HDAdditionalReflectionData a, Editor e, bool isEdit)
Color reprojectionColor = new Color(Color.cyan.r, Color.cyan.g, Color.cyan.b, 0.3f);
Gizmos.color = reprojectionColor;
Gizmos.matrix = GetLocalSpace(reflectionProbe);
if (reflectionData.influenceShape == ReflectionInfluenceShape.Box)
{
Gizmos.DrawWireCube(reflectionData.boxReprojectionVolumeCenter, reflectionData.boxReprojectionVolumeSize);
}
if (reflectionData.influenceShape == ReflectionInfluenceShape.Sphere)
var col = Gizmos.color;
var mat = Gizmos.matrix;
Gizmos.matrix = GetLocalSpace(p);
switch (a.influenceShape)
Gizmos.DrawWireSphere(reflectionProbe.center, reflectionData.sphereReprojectionVolumeRadius);
case ReflectionInfluenceShape.Box:
{
Gizmos.color = isEdit ? k_GizmoThemeColorExtentFace : k_GizmoThemeColorExtent;
if (isEdit)
Gizmos.DrawCube(p.center, p.size);
else
Gizmos.DrawWireCube(p.center, p.size);
break;
}
case ReflectionInfluenceShape.Sphere:
{
Gizmos.color = k_GizmoThemeColorExtentFace;
if (isEdit)
Gizmos.DrawSphere(p.center, a.influenceSphereRadius);
else
Gizmos.DrawWireSphere(p.center, a.influenceSphereRadius);
break;
}
Gizmos.matrix = Matrix4x4.identity;
Gizmos.matrix = mat;
Gizmos.color = col;
}
static void DrawVerticalRay(Transform transform)

103
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Lighting/HDReflectionProbeEditor.cs


using UnityEngine;
using UnityEngine.Experimental.Rendering;
using UnityEngine.Experimental.Rendering.HDPipeline;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement;
namespace UnityEditor.Experimental.Rendering

public override void OnInspectorGUI()
{
//InspectColorsGUI();
// Set the legacy blend distance to 0 so the legacy culling system use the probe extent
p.legacyBlendDistance.floatValue = 0;
//k_InfluenceNormalVolumeSection.Draw(s, p, this);
k_SeparateProjectionVolumeSection.Draw(s, p, this);
k_CaptureSection.Draw(s, p, this);
k_AdditionalSection.Draw(s, p, this);

serializedObject.ApplyModifiedProperties();
HideAdditionalComponents(false);
DoShortcutKey(p, this);
}
static void PerformOperations(UIState s, SerializedReflectionProbe p, HDReflectionProbeEditor o)

}
}
void BakeRealtimeProbeIfPositionChanged(UIState s, SerializedReflectionProbe sp, Editor o)
{
if (Application.isPlaying
|| ((ReflectionProbeMode)sp.mode.intValue) != ReflectionProbeMode.Realtime)
{
m_PositionHash = 0;
return;
}
var hash = 0;
for (var i = 0; i < sp.so.targetObjects.Length; i++)
{
var p = (ReflectionProbe)sp.so.targetObjects[i];
var tr = p.GetComponent<Transform>();
hash ^= tr.position.GetHashCode();
}
if (hash != m_PositionHash)
{
m_PositionHash = hash;
for (var i = 0; i < sp.so.targetObjects.Length; i++)
{
var p = (ReflectionProbe)sp.so.targetObjects[i];
p.RenderProbe();
}
}
}
static Matrix4x4 GetLocalSpace(ReflectionProbe probe)
{
var t = probe.transform.position;

{
return editMode == EditMode.SceneViewEditMode.ReflectionProbeBox || editMode == EditMode.SceneViewEditMode.Collider || editMode == EditMode.SceneViewEditMode.GridBox ||
editMode == EditMode.SceneViewEditMode.ReflectionProbeOrigin;
}
static void InspectColorsGUI()
{
EditorGUILayout.LabelField("Color Theme", EditorStyles.largeLabel);
k_GizmoThemeColorExtent = EditorGUILayout.ColorField("Extent", k_GizmoThemeColorExtent);
k_GizmoThemeColorExtentFace = EditorGUILayout.ColorField("Extent Face", k_GizmoThemeColorExtentFace);
k_GizmoThemeColorInfluenceBlend = EditorGUILayout.ColorField("Influence Blend", k_GizmoThemeColorInfluenceBlend);
k_GizmoThemeColorInfluenceBlendFace = EditorGUILayout.ColorField("Influence Blend Face", k_GizmoThemeColorInfluenceBlendFace);
k_GizmoThemeColorInfluenceNormalBlend = EditorGUILayout.ColorField("Influence Normal Blend", k_GizmoThemeColorInfluenceNormalBlend);
k_GizmoThemeColorInfluenceNormalBlendFace = EditorGUILayout.ColorField("Influence Normal Blend Face", k_GizmoThemeColorInfluenceNormalBlendFace);
k_GizmoThemeColorProjection = EditorGUILayout.ColorField("Projection", k_GizmoThemeColorProjection);
k_GizmoThemeColorProjectionFace = EditorGUILayout.ColorField("Projection Face", k_GizmoThemeColorProjectionFace);
k_GizmoThemeColorDisabled = EditorGUILayout.ColorField("Disabled", k_GizmoThemeColorDisabled);
k_GizmoThemeColorDisabledFace = EditorGUILayout.ColorField("Disabled Face", k_GizmoThemeColorDisabledFace);
EditorGUILayout.Space();
}
static void BakeCustomReflectionProbe(ReflectionProbe probe, bool usePreviousAssetPath, bool custom)

{
var renderer = p.GetComponent<Renderer>();
renderer.sharedMaterial.SetTexture(_Cubemap, p.texture);
}
static void ApplyConstraintsOnTargets(UIState s, SerializedReflectionProbe sp, Editor o)
{
switch ((ReflectionInfluenceShape)sp.influenceShape.enumValueIndex)
{
case ReflectionInfluenceShape.Box:
{
var maxBlendDistance = CalculateBoxMaxBlendDistance(s, sp, o);
sp.targetData.blendDistancePositive = Vector3.Min(sp.targetData.blendDistancePositive, maxBlendDistance);
sp.targetData.blendDistanceNegative = Vector3.Min(sp.targetData.blendDistanceNegative, maxBlendDistance);
sp.targetData.blendNormalDistancePositive = Vector3.Min(sp.targetData.blendNormalDistancePositive, maxBlendDistance);
sp.targetData.blendNormalDistanceNegative = Vector3.Min(sp.targetData.blendNormalDistanceNegative, maxBlendDistance);
break;
}
case ReflectionInfluenceShape.Sphere:
{
var maxBlendDistance = Vector3.one * CalculateSphereMaxBlendDistance(s, sp, o);
sp.targetData.blendDistancePositive = Vector3.Min(sp.targetData.blendDistancePositive, maxBlendDistance);
sp.targetData.blendDistanceNegative = Vector3.Min(sp.targetData.blendDistanceNegative, maxBlendDistance);
sp.targetData.blendNormalDistancePositive = Vector3.Min(sp.targetData.blendNormalDistancePositive, maxBlendDistance);
sp.targetData.blendNormalDistanceNegative = Vector3.Min(sp.targetData.blendNormalDistanceNegative, maxBlendDistance);
break;
}
}
}
static readonly KeyCode[] k_ShortCutKeys =
{
KeyCode.Alpha1,
KeyCode.Alpha2,
KeyCode.Alpha3,
};
static void DoShortcutKey(SerializedReflectionProbe p, Editor o)
{
var evt = Event.current;
if (evt.type != EventType.KeyDown || !evt.shift)
return;
for (var i = 0; i < k_ShortCutKeys.Length; ++i)
{
if (evt.keyCode == k_ShortCutKeys[i])
{
var mode = EditMode.editMode == k_Toolbar_SceneViewEditModes[i]
? EditMode.SceneViewEditMode.None
: k_Toolbar_SceneViewEditModes[i];
EditMode.ChangeEditMode(mode, GetBoundsGetter(p)(), o);
evt.Use();
break;
}
}
}
}
}

11
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Lit/BaseLitUI.cs


{
protected static class StylesBaseLit
{
public static GUIContent doubleSidedNormalModeText = new GUIContent("Normal mode", "This will modify the normal base on the selected mode. None: untouch, Mirror: Mirror the normal with vertex normal plane, Flip: Flip the normal");
public static GUIContent doubleSidedNormalModeText = new GUIContent("Normal mode", "This will modify the normal base on the selected mode. Mirror: Mirror the normal with vertex normal plane, Flip: Flip the normal");
public static GUIContent depthOffsetEnableText = new GUIContent("Enable Depth Offset", "EnableDepthOffset on this shader (Use with heightmap)");
// Displacement mapping (POM, tessellation, per vertex)

public enum DoubleSidedNormalMode
{
None,
Mirror,
Flip
Flip,
Mirror
}
public enum TessellationMode

DoubleSidedNormalMode doubleSidedNormalMode = (DoubleSidedNormalMode)material.GetFloat(kDoubleSidedNormalMode);
switch (doubleSidedNormalMode)
{
case DoubleSidedNormalMode.None:
material.SetVector("_DoubleSidedConstants", new Vector4(1.0f, 1.0f, 1.0f, 0.0f));
break;
case DoubleSidedNormalMode.Mirror: // Mirror mode (in tangent space)
material.SetVector("_DoubleSidedConstants", new Vector4(1.0f, 1.0f, -1.0f, 0.0f));
break;

5
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Lit/LitUI.cs


EditorGUILayout.LabelField(StylesBaseUnlit.TransparencyInputsText, EditorStyles.boldLabel);
++EditorGUI.indentLevel;
var isPrePass = material.HasProperty(kPreRefractionPass) && material.GetFloat(kPreRefractionPass) > 0.0;
var isPrepass = material.HasProperty(kPreRefractionPass) && material.GetFloat(kPreRefractionPass) > 0.0;
&& !isPrePass)
&& !isPrepass)
{
m_MaterialEditor.ShaderProperty(refractionMode, Styles.refractionModeText);
var mode = (Lit.RefractionMode)refractionMode.floatValue;

++EditorGUI.indentLevel;
m_MaterialEditor.ShaderProperty(thicknessMultiplier, Styles.refractionThicknessMultiplierText);
thicknessMultiplier.floatValue = Mathf.Max(thicknessMultiplier.floatValue, 0);
--EditorGUI.indentLevel;
m_MaterialEditor.TexturePropertySingleLine(Styles.transmittanceColorText, transmittanceColorMap, transmittanceColor);

20
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Editor/Material/Unlit/BaseUnlitUI.cs


public static GUIContent distortionBlurScaleText = new GUIContent("Distortion Blur Scale", "Distortion Blur Scale");
public static GUIContent distortionBlurRemappingText = new GUIContent("Distortion Blur Remapping", "Distortion Blur Remapping");
public static GUIContent transparentPrePassText = new GUIContent("Pre Refraction Pass", "Render objects before the refraction pass");
public static GUIContent transparentPrepassText = new GUIContent("Pre Refraction Pass", "Render objects before the refraction pass");
public static string advancedText = "Advanced Options";
}

if (enableFogOnTransparent != null)
m_MaterialEditor.ShaderProperty(enableFogOnTransparent, StylesBaseUnlit.enableTransparentFogText);
if (preRefractionPass != null)
m_MaterialEditor.ShaderProperty(preRefractionPass, StylesBaseUnlit.transparentPrePassText);
m_MaterialEditor.ShaderProperty(preRefractionPass, StylesBaseUnlit.transparentPrepassText);
EditorGUI.indentLevel--;
}

{
material.SetOverrideTag("RenderType", "Transparent");
material.SetInt("_ZWrite", 0);
var isPrePass = material.HasProperty(kPreRefractionPass) && material.GetFloat(kPreRefractionPass) > 0.0f;
material.renderQueue = (int)(isPrePass ? HDRenderQueue.PreRefraction : HDRenderQueue.Transparent);
var isPrepass = material.HasProperty(kPreRefractionPass) && material.GetFloat(kPreRefractionPass) > 0.0f;
material.renderQueue = (int)(isPrepass ? HDRenderQueue.PreRefraction : HDRenderQueue.Transparent);
if (material.HasProperty(kBlendMode))
{

material.SetShaderPassEnabled(HDShaderPassNames.s_GBufferDebugDisplayStr, true);
material.SetShaderPassEnabled(HDShaderPassNames.s_MotionVectorsStr, enablePass);
material.SetShaderPassEnabled(HDShaderPassNames.s_DistortionVectorsStr, distortionEnable); // note: use distortionEnable
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPrePassStr, enablePass);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPrepassStr, enablePass);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPostPassStr, enablePass);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPostpassStr, enablePass);
material.SetShaderPassEnabled(HDShaderPassNames.s_MetaStr, enablePass);
material.SetShaderPassEnabled(HDShaderPassNames.s_ShadowCasterStr, enablePass);
}

bool depthWriteEnable = (material.GetFloat(kTransparentDepthPrepassEnable) > 0.0f) && ((SurfaceType)material.GetFloat(kSurfaceType) == SurfaceType.Transparent);
if (depthWriteEnable)
{
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPrePassStr, true);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPrepassStr, true);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPrePassStr, false);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPrepassStr, false);
}
}

if (depthWriteEnable)
{
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPostPassStr, true);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPostpassStr, true);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPostPassStr, false);
material.SetShaderPassEnabled(HDShaderPassNames.s_TransparentDepthPostpassStr, false);
}
}

2
ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDCustomSamplerId.cs


ForwardPassName,
ForwardTransparentDepthPrepass,
RenderForwardError,
TransparentDepthPostPass,
TransparentDepthPostpass,
ObjectsVelocity,
CameraVelocity,
GaussianPyramidColor,

24
ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDRenderPipeline.cs


ShaderPassName[] m_DepthOnlyAndDepthForwardOnlyPassNames = { HDShaderPassNames.s_DepthForwardOnlyName, HDShaderPassNames.s_DepthOnlyName };
ShaderPassName[] m_DepthForwardOnlyPassNames = { HDShaderPassNames.s_DepthForwardOnlyName };
ShaderPassName[] m_DepthOnlyPassNames = { HDShaderPassNames.s_DepthOnlyName };
ShaderPassName[] m_TransparentDepthPrePassNames = { HDShaderPassNames.s_TransparentDepthPrePassName };
ShaderPassName[] m_TransparentDepthPostPassNames = { HDShaderPassNames.s_TransparentDepthPostPassName };
ShaderPassName[] m_TransparentDepthPrepassNames = { HDShaderPassNames.s_TransparentDepthPrepassName };
ShaderPassName[] m_TransparentDepthPostpassNames = { HDShaderPassNames.s_TransparentDepthPostpassName };
ShaderPassName[] m_ForwardErrorPassNames = { HDShaderPassNames.s_AlwaysName, HDShaderPassNames.s_ForwardBaseName, HDShaderPassNames.s_DeferredName, HDShaderPassNames.s_PrepassBaseName, HDShaderPassNames.s_VertexName, HDShaderPassNames.s_VertexLMRGBMName, HDShaderPassNames.s_VertexLMName };
ShaderPassName[] m_SinglePassName = new ShaderPassName[1];

InitAndClearBuffer(hdCamera, enableBakeShadowMask, cmd);
RenderDepthPrepass(m_CullResults, hdCamera, renderContext, cmd, true);
RenderDepthPrepass(m_CullResults, hdCamera, renderContext, cmd);
RenderObjectsVelocity(m_CullResults, hdCamera, renderContext, cmd);

RenderForwardError(m_CullResults, camera, renderContext, cmd, ForwardPass.Transparent);
// Fill depth buffer to reduce artifact for transparent object during postprocess
RenderTransparentDepthPostPass(m_CullResults, camera, renderContext, cmd, ForwardPass.Transparent);
RenderTransparentDepthPostpass(m_CullResults, camera, renderContext, cmd, ForwardPass.Transparent);
PushFullScreenDebugTexture(cmd, m_CameraColorBuffer, camera, renderContext, FullScreenDebugMode.NanTracker);

// Forward only renderer: We always render everything
// Deferred renderer: We render a depth prepass only if engine request it. We can decide if we render everything or only opaque alpha tested object.
// Forward opaque with deferred renderer (DepthForwardOnly pass): We always render everything
void RenderDepthPrepass(CullResults cull, HDCamera hdCamera, ScriptableRenderContext renderContext, CommandBuffer cmd, bool hasDecals)
void RenderDepthPrepass(CullResults cull, HDCamera hdCamera, ScriptableRenderContext renderContext, CommandBuffer cmd)
{
// In case of deferred renderer, we can have forward opaque material. These materials need to be render in the depth buffer to correctly build the light list.
// And they will tag the stencil to not be lit during the deferred lighting pass.

using (new ProfilingSample(cmd, addAlphaTestedOnly ? "Depth Prepass alpha test" : "Depth Prepass", GetSampler(CustomSamplerId.DepthPrepass)))
{
CoreUtils.SetRenderTarget(cmd, m_CameraDepthStencilBufferRT);
if (hasDecals || (addFullDepthPrepass && !addAlphaTestedOnly)) // Always true in case of forward rendering, use in case of deferred rendering if requesting a full depth prepass
if (m_FrameSettings.enableDBuffer || (addFullDepthPrepass && !addAlphaTestedOnly)) // Always true in case of forward rendering, use in case of deferred rendering if requesting a full depth prepass
{
// We render first the opaque object as opaque alpha tested are more costly to render and could be reject by early-z (but not Hi-z as it is disable with clip instruction)
// This is handled automatically with the RenderQueue value (OpaqueAlphaTested have a different value and thus are sorted after Opaque)

}
}
if (m_FrameSettings.enableTransparentPrePass)
if (m_FrameSettings.enableTransparentPrepass)
RenderTransparentRenderList(cull, camera, renderContext, cmd, m_TransparentDepthPrePassNames);
RenderTransparentRenderList(cull, camera, renderContext, cmd, m_TransparentDepthPrepassNames);
}
}
}

}
}
void RenderTransparentDepthPostPass(CullResults cullResults, Camera camera, ScriptableRenderContext renderContext, CommandBuffer cmd, ForwardPass pass)
void RenderTransparentDepthPostpass(CullResults cullResults, Camera camera, ScriptableRenderContext renderContext, CommandBuffer cmd, ForwardPass pass)
if (!m_FrameSettings.enableTransparentPostPass)
if (!m_FrameSettings.enableTransparentPostpass)
using (new ProfilingSample(cmd, "Render Transparent Depth Post ", GetSampler(CustomSamplerId.TransparentDepthPostPass)))
using (new ProfilingSample(cmd, "Render Transparent Depth Post ", GetSampler(CustomSamplerId.TransparentDepthPostpass)))
RenderTransparentRenderList(cullResults, camera, renderContext, cmd, m_TransparentDepthPostPassNames);
RenderTransparentRenderList(cullResults, camera, renderContext, cmd, m_TransparentDepthPostpassNames);
}
}

22
ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDRenderPipelineAsset.cs


[SerializeField]
public SubsurfaceScatteringSettings sssSettings;
// Default Material / Shader
[SerializeField]
Material m_DefaultDiffuseMaterial;
[SerializeField]
Shader m_DefaultShader;
public Material defaultDiffuseMaterial
{
get { return m_DefaultDiffuseMaterial; }
set { m_DefaultDiffuseMaterial = value; }
}
public Shader defaultShader
{
get { return m_DefaultShader; }
set { m_DefaultShader = value; }
}
return m_DefaultShader;
return m_RenderPipelineResources.defaultShader;
return m_DefaultDiffuseMaterial;
return m_RenderPipelineResources.defaultDiffuseMaterial;
}
public override Material GetDefaultParticleMaterial()

9
ScriptableRenderPipeline/HDRenderPipeline/HDRP/HDStringConstants.cs


public static readonly string s_SRPDefaultUnlitStr = "SRPDefaultUnlit";
public static readonly string s_MotionVectorsStr = "MotionVectors";
public static readonly string s_DistortionVectorsStr = "DistortionVectors";
public static readonly string s_TransparentDepthPrePassStr = "TransparentDepthPrepass";
public static readonly string s_TransparentDepthPrepassStr = "TransparentDepthPrepass";
public static readonly string s_TransparentDepthPostPassStr = "TransparentDepthPostpass";
public static readonly string s_TransparentDepthPostpassStr = "TransparentDepthPostpass";
public static readonly string s_MetaStr = "Meta";
public static readonly string s_ShadowCasterStr = "ShadowCaster";

public static readonly ShaderPassName s_SRPDefaultUnlitName = new ShaderPassName(s_SRPDefaultUnlitStr);
public static readonly ShaderPassName s_MotionVectorsName = new ShaderPassName(s_MotionVectorsStr);
public static readonly ShaderPassName s_DistortionVectorsName = new ShaderPassName(s_DistortionVectorsStr);
public static readonly ShaderPassName s_TransparentDepthPrePassName = new ShaderPassName(s_TransparentDepthPrePassStr);
public static readonly ShaderPassName s_TransparentDepthPrepassName = new ShaderPassName(s_TransparentDepthPrepassStr);
public static readonly ShaderPassName s_TransparentDepthPostPassName = new ShaderPassName(s_TransparentDepthPostPassStr);
public static readonly ShaderPassName s_TransparentDepthPostpassName = new ShaderPassName(s_TransparentDepthPostpassStr);
// Legacy name
public static readonly ShaderPassName s_AlwaysName = new ShaderPassName("Always");

public static readonly int _NonJitteredViewProjMatrix = Shader.PropertyToID("_NonJitteredViewProjMatrix");
public static readonly int _ViewProjMatrix = Shader.PropertyToID("_ViewProjMatrix");
public static readonly int _InvViewProjMatrix = Shader.PropertyToID("_InvViewProjMatrix");
public static readonly int _ViewParam = Shader.PropertyToID("_ViewParam");
public static readonly int _InvProjParam = Shader.PropertyToID("_InvProjParam");
public static readonly int _ScreenSize = Shader.PropertyToID("_ScreenSize");
public static readonly int _PrevViewProjMatrix = Shader.PropertyToID("_PrevViewProjMatrix");

15
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/HDAdditionalReflectionData.cs


public Vector3 boxReprojectionVolumeCenter = Vector3.zero;
public float maxSearchDistance = 8.0f;
public Texture previewCubemap;
public Vector3 blendDistancePositive = Vector3.zero;
public Vector3 blendDistanceNegative = Vector3.zero;
public Vector3 blendNormalDistancePositive = Vector3.zero;
public Vector3 blendNormalDistanceNegative = Vector3.zero;
public Vector3 boxSideFadePositive = Vector3.one;
public Vector3 boxSideFadeNegative = Vector3.one;
public Vector3 boxBlendCenterOffset { get { return (blendDistanceNegative - blendDistancePositive) * 0.5f; } }
public Vector3 boxBlendSizeOffset { get { return -(blendDistancePositive + blendDistanceNegative); } }
public Vector3 boxBlendNormalCenterOffset { get { return (blendNormalDistanceNegative - blendNormalDistancePositive) * 0.5f; } }
public Vector3 boxBlendNormalSizeOffset { get { return -(blendNormalDistancePositive + blendNormalDistanceNegative); } }
public float sphereBlendRadiusOffset { get { return -blendDistancePositive.x; } }
public float sphereBlendNormalRadiusOffset { get { return -blendNormalDistancePositive.x; } }
}
}

23
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightDefinition.cs


using UnityEngine;
using UnityEngine;
namespace UnityEngine.Experimental.Rendering.HDPipeline
{

public int envIndex;
public Vector3 up;
public float blendDistance; // blend transition outside the volume
public float dimmer;
public Vector3 innerDistance; // equivalent to volume scale
public Vector3 innerDistance; // extents of the env light
public float dimmer;
public float unused1;
public Vector3 blendDistancePositive; //+X,+Y,+Z
public float unused2;
public Vector3 blendDistanceNegative; //-X,-Y,-Z
public float unused3;
public Vector3 blendNormalDistancePositive; //+X,+Y,+Z
public float unused4;
public Vector3 blendNormalDistanceNegative; //-X,-Y,-Z
public float unused5;
public Vector3 boxSideFadePositive; //+X,+Y,+Z
public float unused6;
public Vector3 boxSideFadeNegative; //-X,-Y,-Z
public float unused7;
};
// Usage of StencilBits.Lighting on 2 bits.

72
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightDefinition.cs.hlsl


float3 forward;
int envIndex;
float3 up;
float blendDistance;
float dimmer;
float dimmer;
float unused1;
float3 blendDistancePositive;
float unused2;
float3 blendDistanceNegative;
float unused3;
float3 blendNormalDistancePositive;
float unused4;
float3 blendNormalDistanceNegative;
float unused5;
float3 boxSideFadePositive;
float unused6;
float3 boxSideFadeNegative;
float unused7;
};
//

{
return value.up;
}
float GetBlendDistance(EnvLightData value)
float GetDimmer(EnvLightData value)
return value.blendDistance;
return value.dimmer;
}
float3 GetRight(EnvLightData value)
{

{
return value.offsetLS;
}
float GetDimmer(EnvLightData value)
float GetUnused1(EnvLightData value)
return value.dimmer;
return value.unused1;
}
float3 GetBlendDistancePositive(EnvLightData value)
{
return value.blendDistancePositive;
}
float GetUnused2(EnvLightData value)
{
return value.unused2;
}
float3 GetBlendDistanceNegative(EnvLightData value)
{
return value.blendDistanceNegative;
}
float GetUnused3(EnvLightData value)
{
return value.unused3;
}
float3 GetBlendNormalDistancePositive(EnvLightData value)
{
return value.blendNormalDistancePositive;
}
float GetUnused4(EnvLightData value)
{
return value.unused4;
}
float3 GetBlendNormalDistanceNegative(EnvLightData value)
{
return value.blendNormalDistanceNegative;
}
float GetUnused5(EnvLightData value)
{
return value.unused5;
}
float3 GetBoxSideFadePositive(EnvLightData value)
{
return value.boxSideFadePositive;
}
float GetUnused6(EnvLightData value)
{
return value.unused6;
}
float3 GetBoxSideFadeNegative(EnvLightData value)
{
return value.boxSideFadeNegative;
}
float GetUnused7(EnvLightData value)
{
return value.unused7;
}

58
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightLoop/LightLoop.cs


FrameSettings m_FrameSettings = null;
RenderPipelineResources m_Resources = null;
// this defualt additionalLightData is use for lights that don't have any (like preview light)
HDAdditionalLightData defaultHDAdditionalLightData = new HDAdditionalLightData();
// Following is an array of material of size eight for all combination of keyword: OUTPUT_SPLIT_LIGHTING - LIGHTLOOP_TILE_PASS - SHADOWS_SHADOWMASK - USE_FPTL_LIGHTLIST/USE_CLUSTERED_LIGHTLIST - DEBUG_DISPLAY
Material[] m_deferredLightingMaterial;
Material m_DebugViewTilesMaterial;

{
var additionalData = probe.probe.GetComponent<HDAdditionalReflectionData>();
var extents = probe.bounds.extents;
var influenceBlendDistancePositive = Vector3.one * probe.blendDistance;
var influenceBlendDistanceNegative = Vector3.one * probe.blendDistance;
// For now we won't display real time probe when rendering one.
// TODO: We may want to display last frame result but in this case we need to be careful not to update the atlas before all realtime probes are rendered (for frame coherency).

// CAUTION: localToWorld is the transform for the widget of the reflection probe. i.e the world position of the point use to do the cubemap capture (mean it include the local offset)
envLightData.positionWS = probe.localToWorld.GetColumn(3);
envLightData.boxSideFadePositive = Vector3.one;
envLightData.boxSideFadeNegative = Vector3.one;
if (additionalData != null)
{

case ReflectionInfluenceShape.Box:
{
envLightData.envShapeType = EnvShapeType.Box;
envLightData.boxSideFadePositive = additionalData.boxSideFadePositive;
envLightData.boxSideFadeNegative = additionalData.boxSideFadeNegative;
break;
}
case ReflectionInfluenceShape.Sphere:

envLightData.minProjectionDistance = 65504.0f;
envLightData.dimmer = additionalData.dimmer;
envLightData.blendNormalDistancePositive = additionalData.blendNormalDistancePositive;
envLightData.blendNormalDistanceNegative = additionalData.blendNormalDistanceNegative;
influenceBlendDistancePositive = additionalData.blendDistancePositive;
influenceBlendDistanceNegative = additionalData.blendDistanceNegative;
}
else
{

}
envLightData.dimmer = 1;
envLightData.blendDistancePositive = Vector3.zero;
envLightData.blendDistanceNegative = Vector3.zero;
}
// remove scale from the matrix (Scale in this matrix is use to scale the widget)

// So we let the current UI but we assume blendDistance is an inside factor instead
// Blend distance can't be larger than the max radius
// probe.bounds.extents is BoxSize / 2
float maxBlendDist = Mathf.Min(probe.bounds.extents.x, Mathf.Min(probe.bounds.extents.y, probe.bounds.extents.z));
float blendDistance = Mathf.Min(maxBlendDist, probe.blendDistance);
envLightData.innerDistance = extents - new Vector3(blendDistance, blendDistance, blendDistance);
var blendDistancePositive = Vector3.Min(probe.bounds.extents, influenceBlendDistancePositive);
var blendDistanceNegative = Vector3.Min(probe.bounds.extents, influenceBlendDistanceNegative);
envLightData.innerDistance = extents;
envLightData.blendDistance = blendDistance;
envLightData.blendDistancePositive = blendDistancePositive;
envLightData.blendDistanceNegative = blendDistanceNegative;
m_lightList.envLights.Add(envLightData);

{
using (new ProfilingSample(cmd, "Prepare Lights For GPU"))
{
// If any light require it, we need to enabled bake shadow mask feature
m_enableBakeShadowMask = false;

{
var light = cullResults.visibleLights[lightIndex];
// We only process light with additional data
// Light should always have additional data, however preview light right don't have, so we must handle the case by assigning defaultHDAdditionalLightData
// Debug.Assert(additionalData == null, "Missing HDAdditionalData on a light - Should have been create by HDLightEditor");
return false;
additionalData = defaultHDAdditionalLightData;
LightCategory lightCategory = LightCategory.Count;
GPULightType gpuLightType = GPULightType.Point;

m_enableBakeShadowMask = m_enableBakeShadowMask || IsBakedShadowMaskLight(light.light);
// Light should always have additional data, however preview light right don't have, so we must handle the case by assigning defaultHDAdditionalLightData
if (additionalLightData == null)
additionalLightData = defaultHDAdditionalLightData;
var additionalShadowData = light.light.GetComponent<AdditionalShadowData>(); // Can be null
// Directional rendering side, it is separated as it is always visible so no volume to handle here

if (GetEnvLightData(cmd, camera, probe))
{
GetEnvLightVolumeDataAndBound(probe, lightVolumeType, worldToView);
GetEnvLightVolumeDataAndBound(probe, lightVolumeType, worldToView);
// We make the light position camera-relative as late as possible in order
// to allow the preceding code to work with the absolute world space coordinates.
if (ShaderConfig.s_CameraRelativeRendering != 0)
{
// Caution: 'EnvLightData.positionWS' is camera-relative after this point.
int n = m_lightList.envLights.Count;
EnvLightData envLightData = m_lightList.envLights[n - 1];
envLightData.positionWS -= camPosWS;
m_lightList.envLights[n - 1] = envLightData;
}
// We make the light position camera-relative as late as possible in order
// to allow the preceding code to work with the absolute world space coordinates.
if (ShaderConfig.s_CameraRelativeRendering != 0)
{
// Caution: 'EnvLightData.positionWS' is camera-relative after this point.
int n = m_lightList.envLights.Count;
EnvLightData envLightData = m_lightList.envLights[n - 1];
envLightData.positionWS -= camPosWS;
m_lightList.envLights[n - 1] = envLightData;
}
}
}

25
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Lighting/LightUtilities.hlsl


EnvLightData InitSkyEnvLightData(int envIndex)
{
EnvLightData output;
output.envShapeType = ENVSHAPETYPE_SKY;
output.envIndex = envIndex;
output.forward = float3(0.0, 0.0, 1.0);
output.up = float3(0.0, 1.0, 0.0);
output.right = float3(1.0, 0.0, 0.0);
output.positionWS = float3(0.0, 0.0, 0.0);
output.offsetLS = float3(0.0, 0.0, 0.0);
output.innerDistance = float3(0.0, 0.0, 0.0);
output.blendDistance = 1.0;
output.dimmer = 1.0;
output.envShapeType = ENVSHAPETYPE_SKY;
output.envIndex = envIndex;
output.forward = float3(0.0, 0.0, 1.0);
output.up = float3(0.0, 1.0, 0.0);
output.right = float3(1.0, 0.0, 0.0);
output.positionWS = float3(0.0, 0.0, 0.0);
output.offsetLS = float3(0.0, 0.0, 0.0);
output.innerDistance = float3(0.0, 0.0, 0.0);
output.blendDistancePositive = float3(0.0, 0.0, 0.0);
output.blendDistanceNegative = float3(0.0, 0.0, 0.0);
output.blendNormalDistancePositive = float3(0.0, 0.0, 0.0);
output.blendNormalDistanceNegative = float3(0.0, 0.0, 0.0);
output.boxSideFadePositive = float3(0.0, 0.0, 0.0);
output.boxSideFadeNegative = float3(0.0, 0.0, 0.0);
output.dimmer = 1.0;
return output;
}

5
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/LayeredLit/LayeredLit.shader


[ToggleOff] _EnableBlendModePreserveSpecularLighting("Enable Blend Mode Preserve Specular Lighting", Float) = 1.0
[ToggleOff] _DoubleSidedEnable("Double sided enable", Float) = 0.0
[Enum(None, 0, Mirror, 1, Flip, 2)] _DoubleSidedNormalMode("Double sided normal mode", Float) = 1
[Enum(Flip, 0, Mirror, 1)] _DoubleSidedNormalMode("Double sided normal mode", Float) = 1
[HideInInspector] _DoubleSidedConstants("_DoubleSidedConstants", Vector) = (1, 1, -1, 0)
[Enum(Subsurface Scattering, 0, Standard, 1)] _MaterialID("MaterialId", Int) = 1 // MaterialId.RegularLighting

SubShader
{
Pass
// Caution: The outline selection in the editor use the vertex shader/hull/domain shader of the first pass declare. So it should not bethe meta pass.
Pass
{
Name "GBuffer" // Name is not used
Tags { "LightMode" = "GBuffer" } // This will be only for opaque object based on the RenderQueue index

5
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/LayeredLit/LayeredLitTessellation.shader


[ToggleOff] _EnableBlendModePreserveSpecularLighting("Enable Blend Mode Preserve Specular Lighting", Float) = 1.0
[ToggleOff] _DoubleSidedEnable("Double sided enable", Float) = 0.0
[Enum(None, 0, Mirror, 1, Flip, 2)] _DoubleSidedNormalMode("Double sided normal mode", Float) = 1
[Enum(Flip, 0, Mirror, 1)] _DoubleSidedNormalMode("Double sided normal mode", Float) = 1
[HideInInspector] _DoubleSidedConstants("_DoubleSidedConstants", Vector) = (1, 1, -1, 0)
[Enum(Subsurface Scattering, 0, Standard, 1)] _MaterialID("MaterialId", Int) = 1 // MaterialId.RegularLighting

SubShader
{
Pass
// Caution: The outline selection in the editor use the vertex shader/hull/domain shader of the first pass declare. So it should not bethe meta pass.
Pass
{
Name "GBuffer" // Name is not used
Tags { "LightMode" = "GBuffer" } // This will be only for opaque object based on the RenderQueue index

106
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/Lit.hlsl


#define ENVMAP_FEATURE_PERFACEINFLUENCE
#define ENVMAP_FEATURE_INFLUENCENORMAL
#define ENVMAP_FEATURE_PERFACEFADE
//-----------------------------------------------------------------------------
// SurfaceData and BSDFData
//-----------------------------------------------------------------------------

float hitDistanceFromPosition = depthFromPosition / dot(-V, rayWS);
return positionWS + rayWS * hitDistanceFromPosition;
}
//------------------------------------------------------------------------------------
// Little helper to share code between sphere and box.
// These function will fade the mask of a reflection volume based on normal orientation compare to direction define by the center of the reflection volume.
//-----------------------------------------------------------------------------
float InfluenceFadeNormalWeight(float3 normal, float3 centerToPos)
{
// Start weight from 0.6f (1 fully transparent) to 0.2f (fully opaque).
return saturate((-1.0f / 0.4f) * dot(normal, centerToPos) + (0.6f / 0.4f));
}
//-----------------------------------------------------------------------------

{
// 1. First process the projection
float3 dirLS = mul(R, worldToLocal);
float sphereOuterDistance = lightData.innerDistance.x + lightData.blendDistance;
float dist = SphereRayIntersectSimple(positionLS, dirLS, sphereOuterDistance);
dist = max(dist, lightData.minProjectionDistance); // Setup projection to infinite if requested (mean no projection shape)
float sphereOuterDistance = lightData.innerDistance.x;
float projectionDistance = SphereRayIntersectSimple(positionLS, dirLS, sphereOuterDistance);
projectionDistance = max(projectionDistance, lightData.minProjectionDistance); // Setup projection to infinite if requested (mean no projection shape)
R = (positionWS + dist * R) - lightData.positionWS;
R = (positionWS + projectionDistance * R) - lightData.positionWS;
dist = SphereRayIntersectSimple(positionLS, dirLS, sphereOuterDistance);
coatR = (positionWS + dist * coatR) - lightData.positionWS;
projectionDistance = SphereRayIntersectSimple(positionLS, dirLS, sphereOuterDistance);
coatR = (positionWS + projectionDistance * coatR) - lightData.positionWS;
// 2. Process the influence
float distFade = max(length(positionLS) - lightData.innerDistance.x, 0.0);
weight = saturate(1.0 - distFade / max(lightData.blendDistance, 0.0001)); // avoid divide by zero
// 2. Process the position influence
float lengthPositionLS = length(positionLS);
float sphereInfluenceDistance = lightData.innerDistance.x - lightData.blendDistancePositive.x;
float distFade = max(lengthPositionLS - sphereInfluenceDistance, 0.0);
float alpha = saturate(1.0 - distFade / max(lightData.blendDistancePositive.x, 0.0001)); // avoid divide by zero
#if defined(ENVMAP_FEATURE_INFLUENCENORMAL)
// 3. Process the normal influence
float insideInfluenceNormalVolume = lengthPositionLS <= (lightData.innerDistance.x - lightData.blendNormalDistancePositive.x) ? 1.0 : 0.0;
float insideWeight = InfluenceFadeNormalWeight(bsdfData.normalWS, normalize(positionWS - lightData.positionWS));
alpha *= insideInfluenceNormalVolume ? 1.0 : insideWeight;
#endif
weight = alpha;
// 1. First process the projection
float3 boxOuterDistance = lightData.innerDistance + float3(lightData.blendDistance, lightData.blendDistance, lightData.blendDistance);
float dist = BoxRayIntersectSimple(positionLS, dirLS, -boxOuterDistance, boxOuterDistance);
dist = max(dist, lightData.minProjectionDistance); // Setup projection to infinite if requested (mean no projection shape)
float3 boxOuterDistance = lightData.innerDistance;
float projectionDistance = BoxRayIntersectSimple(positionLS, dirLS, -boxOuterDistance, boxOuterDistance);
projectionDistance = max(projectionDistance, lightData.minProjectionDistance); // Setup projection to infinite if requested (mean no projection shape)
R = (positionWS + dist * R) - lightData.positionWS;
R = (positionWS + projectionDistance * R) - lightData.positionWS;
// TODO: add distance based roughness

dirLS = mul(coatR, worldToLocal);
dist = BoxRayIntersectSimple(positionLS, dirLS, -boxOuterDistance, boxOuterDistance);
coatR = (positionWS + dist * coatR) - lightData.positionWS;
projectionDistance = BoxRayIntersectSimple(positionLS, dirLS, -boxOuterDistance, boxOuterDistance);
coatR = (positionWS + projectionDistance * coatR) - lightData.positionWS;
// Influence volume
// 2. Process the position influence
float distFade = DistancePointBox(positionLS, -lightData.innerDistance, lightData.innerDistance);
weight = saturate(1.0 - distFade / max(lightData.blendDistance, 0.0001)); // avoid divide by zero
#if defined(ENVMAP_FEATURE_PERFACEINFLUENCE)
// Distance to each cube face
float3 negativeDistance = boxOuterDistance + positionLS;
float3 positiveDistance = boxOuterDistance - positionLS;
// Influence falloff for each face
float3 negativeFalloff = negativeDistance / max(0.0001, lightData.blendDistanceNegative);
float3 positiveFalloff = positiveDistance / max(0.0001, lightData.blendDistancePositive);
// Fallof is the min for all faces
float influenceFalloff = min(
min(min(negativeFalloff.x, negativeFalloff.y), negativeFalloff.z),
min(min(positiveFalloff.x, positiveFalloff.y), positiveFalloff.z));
float alpha = saturate(influenceFalloff);
#else
float distFace = DistancePointBox(positionLS, -lightData.innerDistance + lightData.blendDistancePositive.x, lightData.innerDistance - lightData.blendDistancePositive.x);
float alpha = saturate(1.0 - distFace / max(lightData.blendDistancePositive.x, 0.0001));
#endif
#if defined(ENVMAP_FEATURE_INFLUENCENORMAL)
// 3. Process the normal influence
// Calculate a falloff value to discard normals pointing outward the center of the environment light
float3 belowPositiveInfluenceNormalVolume = positiveDistance / max(0.0001, lightData.blendNormalDistancePositive);
float3 aboveNegativeInfluenceNormalVolume = negativeDistance / max(0.0001, lightData.blendNormalDistanceNegative);
float insideInfluenceNormalVolume = all(belowPositiveInfluenceNormalVolume >= 1.0) && all(aboveNegativeInfluenceNormalVolume >= 1.0) ? 1.0 : 0;
float insideWeight = InfluenceFadeNormalWeight(bsdfData.normalWS, normalize(positionWS - lightData.positionWS));
alpha *= insideInfluenceNormalVolume ? 1.0 : insideWeight;
#endif
#if defined(ENVMAP_FEATURE_PERFACEFADE)
// 4. Fade specific cubemap faces
// For each axes (both positive and negative ones), we want to fade from the center of one face to another
// So we normalized the sample direction (R) and use its component to fade for each axis
// We consider R.x as cos(X) and then fade as angle from 60°(=acos(1/2)) to 75°(=acos(1/4))
// For positive axes: axisFade = (R - 1/4) / (1/2 - 1/4)
// <=> axisFace = 4 * R - 1;
R = normalize(R);
float3 faceFade = saturate((4 * R - 1) * lightData.boxSideFadePositive) + saturate((-4 * R - 1) * lightData.boxSideFadeNegative);
alpha *= saturate(faceFade.x + faceFade.y + faceFade.z);
#endif
weight = alpha;
}
// Smooth weighting

10
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/Lit.shader


[ToggleOff] _EnableBlendModePreserveSpecularLighting("Enable Blend Mode Preserve Specular Lighting", Float) = 1.0
[ToggleOff] _DoubleSidedEnable("Double sided enable", Float) = 0.0
[Enum(None, 0, Mirror, 1, Flip, 2)] _DoubleSidedNormalMode("Double sided normal mode", Float) = 1
[Enum(Flip, 0, Mirror, 1)] _DoubleSidedNormalMode("Double sided normal mode", Float) = 1
[HideInInspector] _DoubleSidedConstants("_DoubleSidedConstants", Vector) = (1, 1, -1, 0)
[Enum(UV0, 0, Planar, 4, TriPlanar, 5)] _UVBase("UV Set for base", Float) = 0

SubShader
{
// Caution: The outline selection in the editor use the vertex shader/hull/domain shader of the first pass declare. So it should not bethe meta pass.
Pass
{
Name "GBuffer" // Name is not used

ENDHLSL
}
// Caution: Order of pass mater. It should be:
// TransparentDepthPrepass, TransparentBackface, Forward/ForwardOnly, TransparentDepthPostpass
Pass
{
Name "TransparentDepthPrepass"

ENDHLSL
}
// Caution: Order is important: TransparentBackface, then Forward/ForwardOnly
Pass
{
Name "TransparentBackface"

Pass
{
Name "TransparentDepthPostPass"
Tags { "LightMode" = "TransparentDepthPostPass" }
Name "TransparentDepthPostpass"
Tags { "LightMode" = "TransparentDepthPostpass" }
Cull[_CullMode]
ZWrite On

10
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Lit/LitTessellation.shader


[ToggleOff] _EnableBlendModePreserveSpecularLighting("Enable Blend Mode Preserve Specular Lighting", Float) = 1.0
[ToggleOff] _DoubleSidedEnable("Double sided enable", Float) = 0.0
[Enum(None, 0, Mirror, 1, Flip, 2)] _DoubleSidedNormalMode("Double sided normal mode", Float) = 1
[Enum(Flip, 0, Mirror, 1)] _DoubleSidedNormalMode("Double sided normal mode", Float) = 1
[HideInInspector] _DoubleSidedConstants("_DoubleSidedConstants", Vector) = (1, 1, -1, 0)
[Enum(UV0, 0, Planar, 4, TriPlanar, 5)] _UVBase("UV Set for base", Float) = 0

SubShader
{
// Caution: The outline selection in the editor use the vertex shader/hull/domain shader of the first pass declare. So it should not bethe meta pass.
Pass
{
Name "GBuffer" // Name is not used

ENDHLSL
}
// Caution: Order of pass mater. It should be:
// TransparentDepthPrepass, TransparentBackface, Forward/ForwardOnly, TransparentDepthPostpass
Pass
{
Name "TransparentDepthPrepass"

ENDHLSL
}
// Caution: Order is important: TransparentBackface, then Forward/ForwardOnly
Pass
{
Name "TransparentBackface"

Pass
{
Name "TransparentDepthPostPass"
Tags { "LightMode" = "TransparentDepthPostPass" }
Name "TransparentDepthPostpass"
Tags { "LightMode" = "TransparentDepthPostpass" }
Cull[_CullMode]
ZWrite On

92
ScriptableRenderPipeline/HDRenderPipeline/HDRP/Material/Unlit/Unlit.shader


SubShader
{
// Extracts information for lightmapping, GI (emission, albedo, ...)
// This pass it not used during regular rendering.
Pass
{
Name "META"
Tags{ "LightMode" = "Meta" }
Cull Off
HLSLPROGRAM
// Lightmap memo
// DYNAMICLIGHTMAP_ON is used when we have an "enlighten lightmap" ie a lightmap updated at runtime by enlighten.This lightmap contain indirect lighting from realtime lights and realtime emissive material.Offline baked lighting(from baked material / light,
// both direct and indirect lighting) will hand up in the "regular" lightmap->LIGHTMAP_ON.
#define SHADERPASS SHADERPASS_LIGHT_TRANSPORT
#include "../../Material/Material.hlsl"
#include "ShaderPass/UnlitSharePass.hlsl"
#include "UnlitData.hlsl"
#include "../../ShaderPass/ShaderPassLightTransport.hlsl"
ENDHLSL
}
Pass
{
Name "Distortion" // Name is not used
Tags { "LightMode" = "DistortionVectors" } // This will be only for transparent object based on the RenderQueue index
Blend [_DistortionSrcBlend] [_DistortionDstBlend], [_DistortionBlurSrcBlend] [_DistortionBlurDstBlend]
BlendOp Add, [_DistortionBlurBlendOp]
ZTest [_ZTestMode]
ZWrite off
Cull [_CullMode]
HLSLPROGRAM
#define SHADERPASS SHADERPASS_DISTORTION
#include "../../Material/Material.hlsl"
#include "ShaderPass/UnlitDistortionPass.hlsl"
#include "UnlitData.hlsl"
#include "../../ShaderPass/ShaderPassDistortion.hlsl"
ENDHLSL
}
// Caution: The outline selection in the editor use the vertex shader/hull/domain shader of the first pass declare. So it should not bethe meta pass.
// Unlit shader always render in forward
Pass

#include "ShaderPass/UnlitSharePass.hlsl"
#include "UnlitData.hlsl"
#include "../../ShaderPass/ShaderPassForwardUnlit.hlsl"
ENDHLSL
}
// Extracts information for lightmapping, GI (emission, albedo, ...)
// This pass it not used during regular rendering.
Pass
{
Name "META"
Tags{ "LightMode" = "Meta" }
Cull Off
HLSLPROGRAM
// Lightmap memo
// DYNAMICLIGHTMAP_ON is used when we have an "enlighten lightmap" ie a lightmap updated at runtime by enlighten.This lightmap contain indirect lighting from realtime lights and realtime emissive material.Offline baked lighting(from baked material / light,
// both direct and indirect lighting) will hand up in the "regular" lightmap->LIGHTMAP_ON.
#define SHADERPASS SHADERPASS_LIGHT_TRANSPORT
#include "../../Material/Material.hlsl"
#include "ShaderPass/UnlitSharePass.hlsl"
#include "UnlitData.hlsl"
#include "../../ShaderPass/ShaderPassLightTransport.hlsl"
ENDHLSL
}
Pass
{
Name "Distortion" // Name is not used
Tags { "LightMode" = "DistortionVectors" } // This will be only for transparent object based on the RenderQueue index
Blend [_DistortionSrcBlend] [_DistortionDstBlend], [_DistortionBlurSrcBlend] [_DistortionBlurDstBlend]
BlendOp Add, [_DistortionBlurBlendOp]
ZTest [_ZTestMode]
ZWrite off
Cull [_CullMode]
HLSLPROGRAM
#define SHADERPASS SHADERPASS_DISTORTION
#include "../../Material/Material.hlsl"
#include "ShaderPass/UnlitDistortionPass.hlsl"
#include "UnlitData.hlsl"
#include "../../ShaderPass/ShaderPassDistortion.hlsl"
ENDHLSL
}

18
ScriptableRenderPipeline/HDRenderPipeline/HDRP/RenderPipeline/FrameSettings.cs


public static string kEnableSSSAndTransmission = "Enable SSS and Transmission";
public static string kForwardOnly = "Forward Only";
public static string kDeferredDepthPrePass = "Deferred Depth Prepass";
public static string kDeferredDepthPrepass = "Deferred Depth Prepass";
public static string kDeferredDepthPrepassATestOnly = "Deferred Depth Prepass ATest Only";
public static string KEnableTransparentPrepass = "Enable Transparent Prepass";

public bool enableDepthPrepassWithDeferredRendering = false;
public bool enableAlphaTestOnlyInDeferredPrepass = false;
public bool enableTransparentPrePass = true;
public bool enableTransparentPrepass = true;
public bool enableTransparentPostPass = true;
public bool enableTransparentPostpass = true;
public bool enableDistortion = true;
public bool enablePostprocess = true;

frameSettings.enableDepthPrepassWithDeferredRendering = this.enableDepthPrepassWithDeferredRendering;
frameSettings.enableAlphaTestOnlyInDeferredPrepass = this.enableAlphaTestOnlyInDeferredPrepass;
frameSettings.enableTransparentPrePass = this.enableTransparentPrePass;
frameSettings.enableTransparentPrepass = this.enableTransparentPrepass;
frameSettings.enableTransparentPostPass = this.enableTransparentPostPass;
frameSettings.enableTransparentPostpass = this.enableTransparentPostpass;
frameSettings.enableDistortion = this.enableDistortion;
frameSettings.enablePostprocess = this.enablePostprocess;

aggregate.enableDepthPrepassWithDeferredRendering = frameSettings.enableDepthPrepassWithDeferredRendering;
aggregate.enableAlphaTestOnlyInDeferredPrepass = frameSettings.enableAlphaTestOnlyInDeferredPrepass;
aggregate.enableTransparentPrePass = frameSettings.enableTransparentPrePass;
aggregate.enableTransparentPrepass = frameSettings.enableTransparentPrepass;
aggregate.enableTransparentPostPass = frameSettings.enableTransparentPostPass;
aggregate.enableTransparentPostpass = frameSettings.enableTransparentPostpass;
aggregate.enableDistortion = camera.cameraType == CameraType.Reflection ? false : frameSettings.enableDistortion;
// Planar and real time cubemap doesn't need post process and render in FP16

DebugMenuManager.instance.AddDebugItem<bool>(menuName, kDeferredDepthPrepassATestOnly, () => frameSettings.enableDepthPrepassWithDeferredRendering, (value) => frameSettings.enableDepthPrepassWithDeferredRendering = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>(menuName, KEnableTransparentPrepass, () => frameSettings.enableAlphaTestOnlyInDeferredPrepass, (value) => frameSettings.enableAlphaTestOnlyInDeferredPrepass = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>(menuName, KEnableTransparentPrepass, () => frameSettings.enableTransparentPrePass, (value) => frameSettings.enableTransparentPrePass = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>(menuName, KEnableTransparentPrepass, () => frameSettings.enableTransparentPrepass, (value) => frameSettings.enableTransparentPrepass = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>(menuName, kEnableTransparentPostpass, () => frameSettings.enableTransparentPostPass, (value) => frameSettings.enableTransparentPostPass = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>(menuName, kEnableTransparentPostpass, () => frameSettings.enableTransparentPostpass, (value) => frameSettings.enableTransparentPostpass = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>(menuName, kEnableDistortion, () => frameSettings.enableDistortion, (value) => frameSettings.enableDistortion = (bool)value);
DebugMenuManager.instance.AddDebugItem<bool>(menuName, kEnablePostprocess, () => frameSettings.enablePostprocess, (value) => frameSettings.enablePostprocess = (bool)value);

5
ScriptableRenderPipeline/HDRenderPipeline/HDRP/RenderPipelineResources/DepthDownsample.compute


float2 offset = float2(threadUL) * 2.0f + 1.0f;
float4 depths = _Source.GatherRed(sampler_PointClamp, offset * _SrcSize.zw, 0.0);
// Select the nearest sample
#if UNITY_REVERSED_Z
float minDepth = max(min(depths.x, depths.y), max(depths.z, depths.w));
#else
#endif
// Write to the final target
_Result[dispatchThreadId] = minDepth;

3
ScriptableRenderPipeline/HDRenderPipeline/HDRP/RenderPipelineResources/HDRenderPipelineResources.asset


m_Script: {fileID: 11500000, guid: 8b6f86e1523e69a4282e92d393be89a4, type: 3}
m_Name: HDRenderPipelineResources
m_EditorClassIdentifier:
defaultDiffuseMaterial: {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17,
type: 2}
defaultShader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3}
debugDisplayLatlongShader: {fileID: 4800000, guid: c1d1d149a043a5349ba367da6c2051ba,
type: 3}
debugViewMaterialGBufferShader: {fileID: 4800000, guid: 439949ea1bfa91b4ba0d04269fcde33d,

4
ScriptableRenderPipeline/HDRenderPipeline/HDRP/RenderPipelineResources/RenderPipelineResources.cs


{
public class RenderPipelineResources : ScriptableObject
{
// Default Material / Shader
public Material defaultDiffuseMaterial;
public Shader defaultShader;
// Debug
public Shader debugDisplayLatlongShader;
public Shader debugViewMaterialGBufferShader;

5
ScriptableRenderPipeline/HDRenderPipeline/HDRP/ShaderPass/VaryingMesh.hlsl


#ifdef VARYINGS_NEED_TANGENT_TO_WORLD
float4 tangentWS = float4(input.interpolators2.xyz, input.interpolators2.w > 0.0 ? 1.0 : -1.0); // must not be normalized (mikkts requirement)
// Normalize normalWS vector but keep the renormFactor to apply it to bitangent and tangent
float3 unnormalizedNormalWS = input.interpolators1.xyz;
float renormFactor = 1.0 / length(unnormalizedNormalWS);

#if defined(VARYINGS_NEED_CULLFACE) && SHADER_STAGE_FRAGMENT
output.isFrontFace = IS_FRONT_VFACE(input.cullFace, true, false);
// Handle handness of the view matrix (In Unity view matrix default to a determinant of -1)
// when we render a cubemap the view matrix handness is flipped (due to convention used for cubemap) we have a determinant of +1
output.isFrontFace = _ViewParam.x < 0.0 ? output.isFrontFace : !output.isFrontFace;
#endif
return output;

1
ScriptableRenderPipeline/HDRenderPipeline/HDRP/ShaderVariables.hlsl


float4x4 _InvViewProjMatrix;
float4x4 _InvViewMatrix;
float4x4 _InvProjMatrix;
float4 _ViewParam; // .x = ViewMatrix determinant
float4 _InvProjParam;
float4 _ScreenSize; // {w, h, 1/w, 1/h}
float4 _FrustumPlanes[6]; // {(a, b, c) = N, d = -dot(N, P)} [L, R, T, B, N, F]

10
TestbedPipelines/OnTileDeferredPipeline/Shaders/UnityStandardForwardMobile.cginc


#define CUBEMAPFACE_NEGATIVE_Z 5
#if defined(SHADER_API_D3D11)
# include "ShaderLibrary/API/D3D11.hlsl"
# include "CoreRP/ShaderLibrary/API/D3D11.hlsl"
# include "ShaderLibrary/API/PSSL.hlsl"
# include "CoreRP/ShaderLibrary/API/PSSL.hlsl"
# include "ShaderLibrary/API/D3D11.hlsl"
# include "ShaderLibrary/API/D3D11_1.hlsl"
# include "CoreRP/ShaderLibrary/API/D3D11.hlsl"
# include "CoreRP/ShaderLibrary/API/D3D11_1.hlsl"
#include "ShaderLibrary/API/Validate.hlsl"
#include "CoreRP/ShaderLibrary/API/Validate.hlsl"
#include "../../Fptl/Shadow.hlsl"
struct VertexOutputForwardNew

536
Tests/GraphicsTests/RenderPipeline/HDRenderPipeline/Scenes/1xxx_Materials/1202_Lit_DoubleSideNormalMode.unity


--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 8
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3

m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.3661533, g: 0.3847445, b: 0.42534745, a: 1}
m_IndirectSpecularColor: {r: 0.36615217, g: 0.3847425, b: 0.4253455, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0

m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1206394792}
- {fileID: 1463840387}
- {fileID: 1350281944}
m_Father: {fileID: 0}

v_Value: {x: 0, y: 0, z: 0, w: 0}
c_Value: {r: 0, g: 0, b: 0, a: 0}
i_Value_Max: 0
f_Value_Max: 2
f_Value_Max: 1
count: 3
count: 2
offset: 1.5
rotation: {x: 0, y: 0, z: 0}
scale: 1

m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 195823280}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -1.5, y: 0, z: 0}
m_LocalPosition: {x: -1, y: 0, z: 0}
- {fileID: 1221386889}
- {fileID: 1969001307}
- {fileID: 552617596}
- {fileID: 1492725334}
- {fileID: 321102322}
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

m_Script: {fileID: 11500000, guid: c6c2871f720b2af4e9210febdac74517, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 1
shadowResolution: 512
shadowDimmer: 1
shadowFadeDistance: 10000

affectSpecular: 1
lightTypeExtent: 0
spotLightShape: 0
shapeLength: 0.5
shapeHeight: 0.5
aspectRatio: 1
shapeRadius: 0
maxSmoothness: 1

m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: -45, z: 0}
--- !u!21 &386129247
Material:
serializedVersion: 6
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: DoubleSideNormalTest(Clone)(Clone)
m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3}
m_ShaderKeywords: _BLENDMODE_PRESERVE_SPECULAR_LIGHTING _DOUBLESIDED_ON _NORMALMAP
_NORMALMAP_TANGENT_SPACE
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses:
- DistortionVectors
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _AnisotropyMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BaseColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BentNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BentNormalMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DistortionVectorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissiveColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _HeightMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MaskMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMap:
m_Texture: {fileID: 2800000, guid: 6c9639b085103f447815e2965a30810a, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _NormalMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecularColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SubsurfaceRadiusMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TangentMapOS:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ThicknessMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _TransmittanceColorMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Floats:
- _AORemapMax: 1
- _AORemapMin: 0
- _ATDistance: 1
- _AlbedoAffectEmissive: 0
- _AlphaCutoff: 0.5
- _AlphaCutoffEnable: 0
- _AlphaCutoffPostpass: 0.5
- _Anisotropy: 0
- _BlendMode: 0
- _CoatCoverage: 1
- _CoatIOR: 0.5
- _CullMode: 0
- _CullModeForward: 2
- _Cutoff: 0.5
- _DepthOffsetEnable: 0
- _DetailAlbedoScale: 1
- _DetailNormalScale: 1
- _DetailSmoothnessScale: 1
- _DisplacementLockObjectScale: 1
- _DisplacementLockTilingScale: 1
- _DisplacementMode: 0
- _DistortionBlendMode: 0
- _DistortionBlurBlendMode: 0
- _DistortionBlurDstBlend: 1
- _DistortionBlurRemapMax: 1
- _DistortionBlurRemapMin: 0
- _DistortionBlurScale: 1
- _DistortionBlurSrcBlend: 1
- _DistortionDepthTest: 0
- _DistortionDstBlend: 1
- _DistortionEnable: 0
- _DistortionScale: 1
- _DistortionSrcBlend: 1
- _DistortionVectorBias: -1
- _DistortionVectorScale: 2
- _DoubleSidedEnable: 1
- _DoubleSidedNormalMode: 2
- _Drag: 1
- _DstBlend: 0
- _EmissiveColorMode: 1
- _EmissiveIntensity: 0
- _EnableBlendModePreserveSpecularLighting: 1
- _EnableFogOnTransparent: 1
- _EnableSpecularOcclusion: 0
- _EnableWind: 0
- _HeightAmplitude: 0.02
- _HeightCenter: 0.5
- _HeightMax: 1
- _HeightMin: -1
- _IOR: 1
- _InitialBend: 1
- _InvTilingScale: 1
- _LinkDetailsWithBase: 1
- _MaterialID: 1
- _Metallic: 0
- _NormalMapSpace: 0
- _NormalScale: 1
- _PPDLodThreshold: 5
- _PPDMaxSamples: 15
- _PPDMinSamples: 5
- _PPDPrimitiveLength: 1
- _PPDPrimitiveWidth: 1
- _PreRefractionPass: 0
- _RefractionMode: 0
- _ShiverDirectionality: 0.5
- _ShiverDrag: 0.2
- _Smoothness: 0.5
- _SmoothnessRemapMax: 1
- _SmoothnessRemapMin: 0
- _SrcBlend: 1
- _StencilRef: 2
- _Stiffness: 1
- _SubsurfaceProfile: 0
- _SubsurfaceRadius: 1
- _SurfaceType: 0
- _TexWorldScale: 1
- _Thickness: 1
- _ThicknessMultiplier: 1
- _TransparentBackfaceEnable: 0
- _TransparentDepthPostpassEnable: 0
- _UVBase: 0
- _UVDetail: 0
- _ZTestMode: 8
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _DoubleSidedConstants: {r: -1, g: -1, b: -1, a: 0}
- _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
- _InvPrimScale: {r: 1, g: 1, b: 0, a: 0}
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1}
- _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0}
- _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1}
- _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}
--- !u!1 &552617595
--- !u!1 &321102321
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

- component: {fileID: 552617596}
- component: {fileID: 552617598}
- component: {fileID: 552617597}
- component: {fileID: 321102322}
- component: {fileID: 321102324}
- component: {fileID: 321102323}
m_Name: DoubleSidePlane__DoubleSidedNormalMode_2.00
m_Name: DoubleSidePlane__DoubleSidedNormalMode_1.00
--- !u!4 &552617596
--- !u!4 &321102322
m_GameObject: {fileID: 552617595}
m_GameObject: {fileID: 321102321}
m_LocalPosition: {x: 3, y: 0, z: 0}
m_LocalPosition: {x: 1.5, y: 0, z: 0}
m_RootOrder: 2
m_RootOrder: 1
--- !u!23 &552617597
--- !u!23 &321102323
m_GameObject: {fileID: 552617595}
m_GameObject: {fileID: 321102321}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1

m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 386129247}
- {fileID: 1222758656}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &552617598
--- !u!33 &321102324
m_GameObject: {fileID: 552617595}
m_GameObject: {fileID: 321102321}
m_Mesh: {fileID: 4300000, guid: 0661b78617a8d1f48adef7e6b4af05bd, type: 3}
--- !u!114 &649692730
MonoBehaviour:

fogType:
m_OverrideState: 1
m_Value: 0
--- !u!21 &1093412843
--- !u!21 &1222758656
Material:
serializedVersion: 6
m_ObjectHideFlags: 0

stringTagMap: {}
disabledShaderPasses:
- DistortionVectors
- TransparentDepthPrepass
- TransparentDepthPostpass
- TransparentBackface
- TransparentBackfaceDebugDisplay
- MOTIONVECTORS
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:

- _AlphaCutoff: 0.5
- _AlphaCutoffEnable: 0
- _AlphaCutoffPostpass: 0.5
- _AlphaCutoffPrepass: 0.5
- _CullModeForward: 2
- _CullModeForward: 0
- _Cutoff: 0.5
- _DepthOffsetEnable: 0
- _DetailAlbedoScale: 1

- _DistortionVectorBias: -1
- _DistortionVectorScale: 2
- _DoubleSidedEnable: 1
- _DoubleSidedNormalMode: 0
- _DoubleSidedNormalMode: 1
- _Drag: 1
- _DstBlend: 0
- _EmissiveColorMode: 1

- _EnableMotionVectorForVertexAnimation: 0
- _EnableSpecularOcclusion: 0
- _EnableWind: 0
- _HeightAmplitude: 0.02

- _SmoothnessRemapMin: 0
- _SrcBlend: 1
- _StencilRef: 2
- _StencilRefMV: 128
- _StencilWriteMask: 7
- _StencilWriteMaskMV: 128
- _Stiffness: 1
- _SubsurfaceProfile: 0
- _SubsurfaceRadius: 1

- _ThicknessMultiplier: 1
- _TransparentBackfaceEnable: 0
- _TransparentDepthPostpassEnable: 0
- _TransparentDepthPrepassEnable: 0
- _UVBase: 0
- _UVDetail: 0
- _ZTestMode: 8

- _Color: {r: 1, g: 1, b: 1, a: 1}
- _DoubleSidedConstants: {r: 1, g: 1, b: 1, a: 0}
- _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
- _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
- _InvPrimScale: {r: 1, g: 1, b: 0, a: 0}

- _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0}
- _UVMappingMask: {r: 1, g: 0, b: 0, a: 0}
--- !u!1 &1206394791
--- !u!1 &1350281943
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

- component: {fileID: 1206394792}
- component: {fileID: 1206394794}
- component: {fileID: 1206394793}
- component: {fileID: 1350281944}
- component: {fileID: 1350281946}
- component: {fileID: 1350281945}
m_Name: New Text (7)
m_Name: New Text (10)
--- !u!4 &1206394792
--- !u!4 &1350281944
m_GameObject: {fileID: 1206394791}
m_GameObject: {fileID: 1350281943}
m_LocalPosition: {x: -1.5, y: 1, z: 0}
m_LocalPosition: {x: -1, y: 1, z: 0}
m_RootOrder: 0
m_RootOrder: 1
--- !u!102 &1206394793
--- !u!102 &1350281945
m_GameObject: {fileID: 1206394791}
m_Text: None
m_GameObject: {fileID: 1350281943}
m_Text: Flip
m_OffsetZ: 0
m_CharacterSize: 0.1
m_LineSpacing: 1

m_Color:
serializedVersion: 2
rgba: 4294967295
--- !u!23 &1206394794
--- !u!23 &1350281946
m_GameObject: {fileID: 1206394791}
m_GameObject: {fileID: 1350281943}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!1 &1221386888
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 1221386889}
- component: {fileID: 1221386891}
- component: {fileID: 1221386890}
m_Layer: 0
m_Name: DoubleSidePlane__DoubleSidedNormalMode_0.00
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1221386889
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1221386888}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 195823282}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &1221386890
MeshRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1221386888}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 1093412843}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &1221386891
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1221386888}
m_Mesh: {fileID: 4300000, guid: 0661b78617a8d1f48adef7e6b4af05bd, type: 3}
--- !u!1 &1350281943
--- !u!1 &1463840386
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

- component: {fileID: 1350281944}
- component: {fileID: 1350281946}
- component: {fileID: 1350281945}
- component: {fileID: 1463840387}
- component: {fileID: 1463840389}
- component: {fileID: 1463840388}
m_Name: New Text (10)
m_Name: New Text (9)
--- !u!4 &1350281944
--- !u!4 &1463840387
m_GameObject: {fileID: 1350281943}
m_GameObject: {fileID: 1463840386}
m_LocalPosition: {x: 1.5, y: 1, z: 0}
m_LocalPosition: {x: 0.5, y: 1, z: 0}
m_RootOrder: 2
m_RootOrder: 0
--- !u!102 &1350281945
--- !u!102 &1463840388
m_GameObject: {fileID: 1350281943}
m_Text: Flip
m_GameObject: {fileID: 1463840386}
m_Text: Mirror
m_OffsetZ: 0
m_CharacterSize: 0.1
m_LineSpacing: 1

m_Color:
serializedVersion: 2
rgba: 4294967295
--- !u!23 &1350281946
--- !u!23 &1463840389
m_GameObject: {fileID: 1350281943}
m_GameObject: {fileID: 1463840386}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!1 &1463840386
--- !u!1 &1492725333
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}

- component: {fileID: 1463840387}
- component: {fileID: 1463840389}
- component: {fileID: 1463840388}
- component: {fileID: 1492725334}
- component: {fileID: 1492725336}
- component: {fileID: 1492725335}
m_Name: New Text (9)
m_Name: DoubleSidePlane__DoubleSidedNormalMode_0.00
--- !u!4 &1463840387
--- !u!4 &1492725334
m_GameObject: {fileID: 1463840386}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: 0}
m_GameObject: {fileID: 1492725333}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_Father: {fileID: 103750789}
m_RootOrder: 1
m_Father: {fileID: 195823282}
m_RootOrder: 0
--- !u!102 &1463840388
TextMesh:
serializedVersion: 3
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1463840386}
m_Text: Mirror
m_OffsetZ: 0
m_CharacterSize: 0.1
m_LineSpacing: 1
m_Anchor: 4
m_Alignment: 1
m_TabSize: 4
m_FontSize: 16
m_FontStyle: 0
m_RichText: 1
m_Font: {fileID: 12800000, guid: 306d620c715872046bf76568b7f382d4, type: 3}
m_Color:
serializedVersion: 2
rgba: 4294967295
--- !u!23 &1463840389
--- !u!23 &1492725335
m_GameObject: {fileID: 1463840386}
m_GameObject: {fileID: 1492725333}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1

m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 2100000, guid: 306d620c715872046bf76568b7f382d4, type: 3}
- {fileID: 1590950923}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0

m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &1492725336
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1492725333}
m_Mesh: {fileID: 4300000, guid: 0661b78617a8d1f48adef7e6b4af05bd, type: 3}
--- !u!1 &1527785485
GameObject:
m_ObjectHideFlags: 0

m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!21 &1789764152
--- !u!21 &1590950923
Material:
serializedVersion: 6
m_ObjectHideFlags: 0

_NORMALMAP_TANGENT_SPACE
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_DoubleSidedGI: 1
- TransparentDepthPrepass
- TransparentDepthPostpass
- TransparentBackface
- TransparentBackfaceDebugDisplay
- MOTIONVECTORS
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:

- _AlphaCutoff: 0.5
- _AlphaCutoffEnable: 0
- _AlphaCutoffPostpass: 0.5
- _AlphaCutoffPrepass: 0.5
- _CullModeForward: 2
- _CullModeForward: 0
- _Cutoff: 0.5
- _DepthOffsetEnable: 0
- _DetailAlbedoScale: 1

- _DistortionVectorBias: -1
- _DistortionVectorScale: 2
- _DoubleSidedEnable: 1
- _DoubleSidedNormalMode: 1
- _DoubleSidedNormalMode: 0
- _Drag: 1
- _DstBlend: 0
- _EmissiveColorMode: 1

- _EnableMotionVectorForVertexAnimation: 0
- _EnableSpecularOcclusion: 0
- _EnableWind: 0
- _HeightAmplitude: 0.02

- _SmoothnessRemapMin: 0
- _SrcBlend: 1
- _StencilRef: 2
- _StencilRefMV: 128
- _StencilWriteMask: 7
- _StencilWriteMaskMV: 128
- _Stiffness: 1
- _SubsurfaceProfile: 0
- _SubsurfaceRadius: 1

- _ThicknessMultiplier: 1
- _TransparentBackfaceEnable: 0
- _TransparentDepthPostpassEnable: 0
- _TransparentDepthPrepassEnable: 0
- _UVBase: 0
- _UVDetail: 0
- _ZTestMode: 8

- _Color: {r: 1, g: 1, b: 1, a: 1}
- _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0}
- _DoubleSidedConstants: {r: -1, g: -1, b: -1, a: 0}
- _EmissionColor: {r: 1, g: 1, b: 1, a: 1}
- _EmissiveColor: {r: 0, g: 0, b: 0, a: 1}
- _InvPrimScale: {r: 1, g: 1, b: 0, a: 0}

m_Script: {fileID: 11500000, guid: c6c2871f720b2af4e9210febdac74517, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Version: 1
shadowResolution: 512
shadowDimmer: 1
shadowFadeDistance: 10000

affectSpecular: 1
lightTypeExtent: 0
spotLightShape: 0
shapeLength: 0.5
shapeHeight: 0.5
aspectRatio: 1
shapeRadius: 0
maxSmoothness: 1

m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 45, y: 0, z: 0}
--- !u!1 &1969001306
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- component: {fileID: 1969001307}
- component: {fileID: 1969001309}
- component: {fileID: 1969001308}
m_Layer: 0
m_Name: DoubleSidePlane__DoubleSidedNormalMode_1.00
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1969001307
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1969001306}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 1.5, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 195823282}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!23 &1969001308
MeshRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1969001306}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RenderingLayerMask: 4294967295
m_Materials:
- {fileID: 1789764152}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 0
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
--- !u!33 &1969001309
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1969001306}
m_Mesh: {fileID: 4300000, guid: 0661b78617a8d1f48adef7e6b4af05bd, type: 3}

880
Tests/GraphicsTests/RenderPipeline/HDRenderPipeline/Scenes/1xxx_Materials/1205_Lit_Transparent_Refraction.unity
文件差异内容过多而无法显示
查看文件

854
Tests/GraphicsTests/RenderPipeline/HDRenderPipeline/Scenes/1xxx_Materials/1206_Lit_Transparent_Distortion.unity
文件差异内容过多而无法显示
查看文件

3
ScriptableRenderPipeline/LightweightPipeline/LWRP/Data/LightweightPipelineAsset.cs


public class LightweightPipelineAsset : RenderPipelineAsset
{
private const int PACKAGE_MANAGER_PATH_INDEX = 1;
public static readonly string[] m_SearchPaths = {"Assets", "Packages/com.unity.render-pipelines.lightweight"};
// Default values set when a new LightweightPipeline asset is created

// There's currently an issue that prevents FindAssets from find resources withing the package folder.
if (resourceAsset == null)
{
string path = "Packages/com.unity.render-pipelines.lightweight/Data/LightweightPipelineResource.asset";
string path = m_SearchPaths[PACKAGE_MANAGER_PATH_INDEX] + "/LWRP/Data/LightweightPipelineResource.asset";
resourceAsset = AssetDatabase.LoadAssetAtPath<LightweightPipelineResource>(path);
}

5
ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor/ShaderGUI.meta


fileFormatVersion: 2
guid: c8b417f54d2314549995022591d5454f
guid: e2eccaf646dce46a69c0224eb55c61a2
timeCreated: 1496821940
licenseType: Pro
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

4
ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipeline.cs


private ShadowSliceData[] m_ShadowSlices = new ShadowSliceData[kMaxCascades];
// Pipeline pass names
private static readonly ShaderPassName m_DepthPrePass = new ShaderPassName("DepthOnly");
private static readonly ShaderPassName m_DepthPrepass = new ShaderPassName("DepthOnly");
private static readonly ShaderPassName m_LitPassName = new ShaderPassName("LightweightForward");
private static readonly ShaderPassName m_UnlitPassName = new ShaderPassName("SRPDefaultUnlit"); // Renders all shaders without a lightmode tag

context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
var opaqueDrawSettings = new DrawRendererSettings(m_CurrCamera, m_DepthPrePass);
var opaqueDrawSettings = new DrawRendererSettings(m_CurrCamera, m_DepthPrepass);
opaqueDrawSettings.sorting.flags = SortFlags.CommonOpaque;
var opaqueFilterSettings = new FilterRenderersSettings(true)

2
ScriptableRenderPipeline/LightweightPipeline/LWRP/Shaders/LightweightShaderLibrary.meta


fileFormatVersion: 2
guid: 37244f7798708ba449e9893ad27f77f5
guid: 2de5b472450204ae2853db2cb6a2540a
folderAsset: yes
DefaultImporter:
externalObjects: {}

8
ScriptableRenderPipeline/LightweightPipeline/LWRP.meta


fileFormatVersion: 2
guid: 5f9e9e863e5d34a5ab12de3834516604
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
ScriptableRenderPipeline/LightweightPipeline/LWRP/Data.meta


fileFormatVersion: 2
guid: d59f1663563e245fabce035da7cecd75
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor.meta


fileFormatVersion: 2
guid: 53c20613ce8ac478dba8507359e02516
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
ScriptableRenderPipeline/LightweightPipeline/LWRP/Materials.meta


fileFormatVersion: 2
guid: 7f10efc5458aa44a2928a72c38807544
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
ScriptableRenderPipeline/LightweightPipeline/LWRP/Shaders.meta


fileFormatVersion: 2
guid: 248877dd7078443d6b51abf21ee7d52a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

16
ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor/LightweightShaderIncludePaths.cs


using System.IO;
namespace UnityEditor.Experimental.Rendering.LightweightPipeline
{
static class LightweightIncludePaths
{
[ShaderIncludePath]
public static string[] GetPaths()
{
return new[]
{
Path.GetFullPath("Packages/com.unity.render-pipelines.lightweight/LWRP/Shaders"),
};
}
}
}

11
ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor/LightweightShaderIncludePaths.cs.meta


fileFormatVersion: 2
guid: cd920abe23764ecc804601f00b93c770
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
ScriptableRenderPipeline/LightweightPipeline/Editor.meta


fileFormatVersion: 2
guid: 316ed34724625cb47b31136769381b57
folderAsset: yes
timeCreated: 1484576996
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
ScriptableRenderPipeline/LightweightPipeline/Shaders.meta


fileFormatVersion: 2
guid: 81841919e91d4b24ba3a6ca4a5167bce
folderAsset: yes
timeCreated: 1490023078
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
ScriptableRenderPipeline/LightweightPipeline/Materials.meta


fileFormatVersion: 2
guid: bc5fccbcb91216745b747fafd8514a24
folderAsset: yes
timeCreated: 1496317987
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

8
ScriptableRenderPipeline/LightweightPipeline/Data.meta


fileFormatVersion: 2
guid: 96a897191a3b552429d819147e6a36a4
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Tests/GraphicsTests/RenderPipeline/LightweightPipeline/Scenes/030_Shader_RenderOrder.meta


fileFormatVersion: 2
guid: f78229abd339e4d49b6e0e29fd79df0c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

/ScriptableRenderPipeline/Core/com.unity.render-pipelines.core.Runtime.asmdef → /ScriptableRenderPipeline/Core/CoreRP/com.unity.render-pipelines.core.Runtime.asmdef

/ScriptableRenderPipeline/Core/com.unity.render-pipelines.core.Runtime.asmdef.meta → /ScriptableRenderPipeline/Core/CoreRP/com.unity.render-pipelines.core.Runtime.asmdef.meta

/ScriptableRenderPipeline/HDRenderPipeline/com.unity.render-pipelines.high-definition.Runtime.asmdef.meta → /ScriptableRenderPipeline/HDRenderPipeline/HDRP/com.unity.render-pipelines.high-definition.Runtime.asmdef.meta

/ScriptableRenderPipeline/HDRenderPipeline/com.unity.render-pipelines.high-definition.Runtime.asmdef → /ScriptableRenderPipeline/HDRenderPipeline/HDRP/com.unity.render-pipelines.high-definition.Runtime.asmdef

/ScriptableRenderPipeline/LightweightPipeline/LightweightPipeline.cs.meta → /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipeline.cs.meta

/ScriptableRenderPipeline/LightweightPipeline/LightweightPipelineUtils.cs.meta → /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipelineUtils.cs.meta

/ScriptableRenderPipeline/LightweightPipeline/LightweightConstantBuffer.cs.meta → /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightConstantBuffer.cs.meta

/ScriptableRenderPipeline/LightweightPipeline/LightweightConstantBuffer.cs → /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightConstantBuffer.cs

/ScriptableRenderPipeline/LightweightPipeline/LightweightPipelineUtils.cs → /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipelineUtils.cs

/ScriptableRenderPipeline/LightweightPipeline/Materials → /ScriptableRenderPipeline/LightweightPipeline/LWRP/Materials

/ScriptableRenderPipeline/LightweightPipeline/LightweightShaderUtils.cs → /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightShaderUtils.cs

/ScriptableRenderPipeline/LightweightPipeline/LightweightShaderUtils.cs.meta → /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightShaderUtils.cs.meta

/ScriptableRenderPipeline/LightweightPipeline/com.unity.render-pipelines.lightweight.Runtime.asmdef → /ScriptableRenderPipeline/LightweightPipeline/LWRP/com.unity.render-pipelines.lightweight.Runtime.asmdef

/ScriptableRenderPipeline/LightweightPipeline/com.unity.render-pipelines.lightweight.Runtime.asmdef.meta → /ScriptableRenderPipeline/LightweightPipeline/LWRP/com.unity.render-pipelines.lightweight.Runtime.asmdef.meta

/ScriptableRenderPipeline/LightweightPipeline/Data → /ScriptableRenderPipeline/LightweightPipeline/LWRP/Data

/ScriptableRenderPipeline/LightweightPipeline/Editor → /ScriptableRenderPipeline/LightweightPipeline/LWRP/Editor

/ScriptableRenderPipeline/LightweightPipeline/LightweightPipeline.cs → /ScriptableRenderPipeline/LightweightPipeline/LWRP/LightweightPipeline.cs

/ScriptableRenderPipeline/LightweightPipeline/Shaders → /ScriptableRenderPipeline/LightweightPipeline/LWRP/Shaders

正在加载...
取消
保存