MZ@ !L!This program cannot be run in DOS mode. $߁",m,,,,ӈ,L,,N,RichPEL:a$! 8P pxC@AE@0P^TX+<.text68 `.data@<P<@.idataVB@@.rsrcX@@.relocP@BtTp^o<,vuh3,`UUp+kj@wv       0@ ppv        00@P`p 0 `      0ТPС99:h:         00@@PШ0       0@0  ЭP@Э0        00@Ъ0Ю0        0@p0== б       @@P0p         00@@p@ ?00Э0        00@`ppp?x??P? ?4?#?$``PЭ0        00@P`pp?x?@@T@ P??4? #?(@@P`PP Э`@pP 0``@` P` `Э0        0@@pC02@-p,`@@@@@@@@@@@@@@@@@66%P$p$$`%%$%+0&`''P((@ ,`{@@@@{@~@~`p~@0ЭP`        0@ p0        00@p0       0`pXKЊdK90        00@ p p`Э0        0@@p@а0        00@ pг0        00@`p0        00@ p 0         0@p`LRP`0       00@P pS4? P??4? #?(0       00@p0S4@@ T@P??4?$#?,0         0@@p;p0      00@P@p8TP?PHTT@ PXT@P0        00@pT=6@p`ppp`Э@@ЭP`0       00@ pS4U 4UUP? P?$?(4?4#?<ЭЭ0       00@`ppS4U 4UUP@@ T@$P?(?,4?8#?@Э0        00@p V V@Э`p0        00@P0pp        00@@p9E9 ::::::::;;;$;0;<;H;T;`;h;t;;;;;;;:@<H<==P9T >(>8>D>T>`>p>|>>>>>;F J0J-FGcJQgl%A FY?㹌O{8ekČ & : O8e?"ٲ\}2E@k2yD{/,BTv7JqHOJZkwl4A`6%7BmR DMx9˄Nkrc:_Mߑ]qS`J_8fy(TDFL?O(rKO uM_H}ӂ+16@]vUnknown exceptionExceptionReturnNtReturnHrLogNtLogHrFailFast%hs(%u)\%hs!%p: %hs!%p: (caller: %p) %hs(%d) tid(%x) %08X %ws Msg:[%ws] CallContext:[%hs] [%hs(%hs)] [%hs] kernelbase.dllRaiseFailFastException%wswilstd::exception: %hsonecore\internal\sdk\inc\wil\opensource/wil/resource.hntdll.dllRtlNtStatusToDosErrorNoTebRtlDllShutdownInProgressRtlDisownModuleHeapAllocation_p0WilError_03Local\SM0:%d:%d:%hsܝ-9CN޷VXWindows.Foundation.PropertyValue:2NN+leDQ6Fۛb2OXAlphaMask = * .a;bad array new lengthInvalid animatable property mapping.string too longCoefficientsClampOutputArithComp.x * + .y * .z * .w; = saturate();InterpolationModeBorderModeTransformMatrixSharpnessXFormAffineTransform2D's source must be a source parameter.;ModeBlendMultiplyScreenDarkenLightenColorBurnLinearBurnDarkerColorLighterColorColorDodgeLinearDodgeOverlaySoftLightHardLightVividLightLinearLightPinLightHardMixDifferenceExclusionHueSaturationColorLuminositySubtractDivisionUnsupported blend mode.D2DBlend.hlsl.rgb = D2DBlendRgb(, .a = D2DBlendAlpha(.a, .a);ExtendXExtendYBorderUnsupported BorderEffect edge mode.BorderEffect's source must be a source parameter.ColorMatrixAlphaModeColorMatrixEffectUnsupported alpha mode.ColorMatrix4x4ColorOffsetD2DColorMatrix.hlslD2DColorMatrixPremultipliedD2DColorMatrixStraight(ContrastClampInputD2DContrast.hlsl = D2DContrast(PSBodyCompositeSourceOverDestinationOverSourceInDestinationInSourceOutDestinationOutSourceAtopDestinationAtopXorPlusSourceCopyMaskInvertUnsupported composite mode.D2DComposite.hlsl = D2DCompositeWeightCrossFadelerp(d3dcompiler_47.dllD3DReflectLibraryD3DCompileAzimuthElevationDiffuseAmountHeightMapScaleLightColorHeightMapKernelSizeHeightMapInterpolationModeDistantDiffuseLightVectorc_defaultSurfaceNormalD2DLighting.hlsl = D2DDistantDiffuse(SpecularExponentSpecularAmountDistantSpecular = D2DDistantSpecular(map/set too longCInvalid float valueCommon.hlslreturn // Non-finite floating-point value.)Output semantic can be changed only once.sampleUnexpected effect input type.Output_Normal_TangentSpaceXYZ_Light0SpaceWhiteNoise_XYUnknown input parameter.onecoreuap\windows\dwm\effects\compiler\effectgenerator.cpplib_4_0_level_9_3_ps_onlyPixelShader.hlslinvalid vector subscriptvector too longO8T>[K`0˶Unexpected effect property value.%fExpected a D2D1_2DAffineTransform effect type.onecoreuap\windows\dwm\effects\compiler\effectinstance.cppExposureValueExposureMultiplier = minfloat4(.rgb * Unsupported effect type.Invalid number of sources.No more than three graph source parameters with white noise effect are supported.A graph source parameter with a transform can only be used once.A graph source parameter with a border effect can only be used once.No more than four graph source parameters are supported.onecoreuap\windows\dwm\effects\compiler\flattenedeffectgraph.cppEffect is too complex.NoneRtlQueryFeatureConfigurationRtlRegisterFeatureConfigurationChangeNotificationRtlUnregisterFeatureConfigurationChangeNotificationRtlNotifyFeatureUsageNtQueryWnfStateDataNtUpdateWnfStateDataonecore\internal\sdk\inc\wil\Staging.hWilStaging_02Invalid effect input.Animatable property references invalid node index.Animatable property references invalid property index.Animatable property type does not match property metadata.5:Aut:Aul:Aud:Au\:AuT:AuL:AuD:Au<:Au4:Au,:Au$:Au:AFloodRedAmplitudeRedExponentRedOffsetRedDisableGreenAmplitudeGreenExponentGreenOffsetGreenDisableBlueAmplitudeBlueExponentBlueOffsetBlueDisableAlphaAmplitudeAlphaExponentAlphaOffsetAlphaDisableGammaXfer = UnPremultiply(,rgba * pow(abs() + = Premultiply(BlurAmountEffectOptimizationGaussianBlurInvalid blur border mode.onecoreuap\windows\dwm\effects\compiler\graphicseffectgraphtraversal.cppSceneLightingEffect cannot be a source to GaussianBlurEffect.Non-tree shaped effect graph.Null effect input.Malformed effect name.Duplicate effect name.Malformed named input name.Unsupported effect property type.Unexpected property type.Property value out of boundsNull animatable property name.Multiply defined animatable property.Malformed animatable property name.Animatable property refers to an effect not in the graph.Specified property does not exist or cannot be animated.Specified property cannot be animated.Multiple animatable properties animate the same value.unordered_map/set too longinvalid hash bucket counts/hD10/qwGrayscaleD2DSaturation.hlsl = D2DGrayscale(AngleHueRotationMatrixmul(UnPremultiply(),));Invert = Premultiply(minfloat4(1 - UnPremultiply().rgb, .a));RedSlopeGreenSlopeBlueSlopeAlphaSlopeLinearXferLuminanceToAlphaD2DLuminanceToAlpha.hlsl = D2DLuminanceToAlpha(OpacityPSConstants row_major : packoffset(cxyzwout const // Copyright (C) Microsoft. All rights reserved.// Generated file, do not edit.#include "cbuffer : register(b0)export minfloat4 lpkgUnexpected variable scope._minfloatminfloat2minfloat3minfloat4minfloat3x2minfloat4x4LightPositionPointDiffuse = D2DPointDiffuse(.xyz, PointSpecular = D2DPointSpecular( = D2DSaturation(AmbientAmountSpecularShineReflectanceModelSceneLightingc_defaultNormalHeight = SceneLightingParameters(10R^ѕOZdKjIntensitySepiaD2DSepia.hlslD2DSepiaPremultipliedD2DSepiaStraightonecoreuap\windows\dwm\effects\compiler\shaderincluderesolver.cpp↯-jLZתeFLightTargetFocusLimitingConeAngleSpotDiffuseLightTargetVectorLightCosConeAngle = D2DSpotDiffuse(SpotSpecular = D2DSpotSpecular(TemperatureTintTempTintGains.r * .x,.g,.b * .y,a8>>y@y.8>">s'79>s>隉ŧ7.s:>jي>7R;>R>'8 K<>ލ>KQ8`=>w>{8>>m>¾̒8?>ǒ>Ѿŧ8TA>v>b8?B>-&>/8wJG>iR>o9/iL>P>g4RI9-R>[>XY479|~X>o>aTQ9M_>|~>k9+5>o9 n>>jݿ-9u>/>RI9}>o>Zd9>>г=49+>X9>5e9-[>H>'9G>|'> 9PǓ>۶>=9>i>+ l 9/>ط>/5o:[>'>J z' :>W`>-:R>>{#™:>Ĕ>fRI:deque too longFrequencyOffsetWhiteNoiseNoise.hlsl = WhiteNoise(RaH'bad allocationkernel32.dllWerRegisterMemoryBlock-D-DЋBreak, Go (continue), terminate Process, or terminate Thread (bgpt)? Function: *** Assertion failed: %ls%ls%ls *** %s%ls%sSource: `%ls:%ld` (No kernel debugger is present.) Respond with: g -- Go (continue) eb 0x%p 'p';g -- terminate Process eb 0x%p 't';g -- terminate Thread or regular debugging. 'i' is only supported with debug builds. Unrecognized response. onecoreuap\windows\dwm\common\shared\refcountbase.cppCMILRefCountImpl::AddReferenceTried to AddRef an object which has previously been freed (refcount went to 0).45'7bU;=z>?)?($?Sj?@z??Fߑ?9RFߑ?F?J}?n?? ?M?@?C??p=??@??G?/?-? :??e?333333???#?@@@-DT! @@s @@@(@ܥL@N@Y@f@i@@o@ @@BHCzCUUD0E@FGO̽@4 @O_:a$'aU:a$ aU:a$$HeHYO .Qt=w+m;4W2>OCVGjQ Z8[~@p @ p     !s!!!'"W""I###R$$%Y%% &8&p&&'['''(`()l))'*a***D`Xa@oooo q>qň)ϋ׋ #s~g;;<N=|Z[__#_w_z___g`l`mmmmn!n^ppJqqta3*le`  O5RSDSoW ‹03& wuceffects.pdbGCTLX.rdata$brcX+.rdata$T$brcp+H.rdata$r$brc+.CRT$XCA+,.CRT$XCU+.CRT$XCZ+.CRT$XIA+ .CRT$XIC+.CRT$XIZ,.CRT$XLA,.CRT$XLZ,.CRT$XPA ,.CRT$XPZ,.CRT$XTA,.CRT$XTZ,P.gfidsh3.giats3*.rdatap^.rdata$sxdata,`l.rdata$voltmda.rdata$zzzdbgle.rtc$IAApe.rtc$IZZte.rtc$TAAxe.rtc$TZZe.text$di`h.text$mnI.text$x*|.text$ydL+.tlsP+.tls$T+.tls$ZZZX+x.xdata$xE.edataP.data$brcP.data$r$brcpT.dataU6.bss<.idata$5<.00cfg@.idata$2\.idata$3p<.idata$4 .idata$6P.rsrc$01P.rsrc$02 oW ‹03& =φk; uإ:a$hYxYxtYPyY q`YPqY`qHY@Yp\YTYh*eYh+EYXY(Y|Pt%t u46-Gt 6 6Gt5 653GftA HYG tPhRP<;t)(GRhQhPRh$wPwL4Htw(w$h(6VPhL6VPTtwTh`6VPQPw,Sh|6V3Ƀ 9Ou9O0u 9O h6VP twh6VPz0tw0h6VPbtww h6VPG) tw h7VP-h$7VP 3Md Y_^[M3Z̋UVu[FF^]̋SVWRQHPLTYtWHP<;t)_^[̋UESVW&fX8t>^_^[]̋Wt$uV7HVjPP^'g_̋UVu Wu ISFPjHPL؅u2*#}tVuKYYrw[_^]3 Y@Y@3 Y@Y@3 Y@Z@̋UEY3@]̋UVW=YtujQ<;t)jY)_^]̋UtT3ʼnEMS] VuW3t(PVjhut;;7t +#3tWhPWpu2>QAu+ʍx\t H;wUPM_^3[肅̀=YVYuj@VjhoY^% ̋UVWh(7lhH7Pt uu u<;t)_^] ̸;W;jt^@tLt:t(tp:f4\RH >pt:zt({t~53#~;ctZtH>t6Ft$GtruUsca%Y| toOt`tQtItP#=uɅt91#= u~"Ɂ 3 +̋UVWuhu֋PPu&_^]̋Uu3QQj3~ ]̋UE St>=w7VW}MQup3VPWfx ;wu >>z_^WtM[]̅u3@ÍQAu+ʍA̅ujXÍQffu+M̀=|YVWu)=\Yt<;t)u2_^̋UQS]VWjYEKHwKu9z\sMWjIXUBX0HF##BPsvu׍NQsN Qs N$Qs$N0Qs0NLQsLNDQsDNHQsHN8Qs8cNxøxËE3PPE臗jjf̋UtMuhEEP>̋UQS]VWSuV jC YXPJXuClPNl}_^[̋UjhdP(SVWtT3PEde} t3fM3ۡLYEt.QuW<U;t)y E̋pMxYEtQuW<U;t)SS98Y\EM ut UF PmFE̋FEЋF$EԸB{uU M}MTEиB{EËUM yȉE.EиB{Eø0{EEM ut UF PFE̋FEЋF$EԸB{uU MMEиB{EuU M>MEиB{Eø0{33ɉ]tEЈ]ԋEűMd Y_^[]踔̋UjhdPQQSVWtT3PEdUME(333f0E0E]80s@C E+tQtCt uKVAx$Vuuu uΉsC oE3ɉEK8HtC3@Y@CE tf9uCC3ҋEC$EC(ECE C ECPE{,{4CT3jYS0=Yt<;t)=XYCLt hu0S<;t)=PYtS<;t)=lYtS<;t)39C|} KcC =,Yud=$Yt<;t) ؅u.=0Ytu8@YumPPS<;t)Q=0Yt)=@Yu hu(S<;t)u(3f9u SV=4Yt!=`Yt<;t)Md Y_^[49̋UTSYVWtW<;t)pYtW<;t)jPEjPOP3@E  EEEu PMGEȋG(EẺMj̋UQuuuQQűU SVWEMMPQj}EPuQQuM̋USVWuQQh7E~ MQQ}jEPuQQMh7A̋Uu uQQu]̋UuQQu]̋UjhdPtT3PEdu 4̋UjhdPtT3PEdhuJ QQh7jY)̀9u q̋Uu@t]QM$ 0̋Uut]QM. ̡Yuh7lY̋Ujuu huPh] ̋Ujh dPVWtT3PEd=Yuh7lP=Ytu<;t)Md Y_^̋Ujh dPVWtT3PEd=Yu!h7P=Yu2<;t)Md Y_^̋Ujh dPVWtT3PEd=Yuh8LP=Ytu u<;t)Md Y_^̋UQQVW3EEQEPy#Md7VWjbZ|MVWjkZo E3_^̋U tT3ʼnEVu% EWuuQuQGh48v3@QQQPV&yMVhd73M_3^rt̋UQQSVW3ۋSVuMhd7t=t ]u=EPjVԐuESjVԐu =*tnuE]PjVԐu w9]tKSjVԐu8=*u+SVu 9tE3MVhd7_^[̋UtT3ʼnES]VWQQ3Q3sh48PVh u!tRMhd7,WjHPPu>;u_^[̋UVWh3Vuu uVt P_^]̋UQQWt&VEUEMV^E_̋UQQtUEME̋UQQtUEMEhQ3j@PhH8hPhS]PSP9u g] PVEy&Pt)A}WyȺ.MVhd7̋UQWtW EOPu7SV3ۍOSSO SM-WSHPP^[MT_̋VWOO OO_^̋USVW}j@UZ'jY؉]uMVhd7B]3ɉMMuaQPQVMjyMEVhd7EPu9e3MOMGM_^[)̋UQMA(W}E;t;SVt$[NVjHPPuߋE;u^[_̋UV1jjV=t t =u3E0^]QMB̋UQQWt&VEUEM+V^E_̋!tPjHPP̋UUSV3ۋM Wj0~FFAF Y[SjWs fG3j Y_^[]̋USVMڋMWMQQMuE}EEPuuu u_^[̋UQSV3W;tE}t>f9t9+މE;s E t+ &PWӋE YYt0E E t_^[̋UQSVڋW;t9}t2?t-+މE;rPWӋE YYt0E E t _^[̋UQjuuuu u]̋UXzVWE|$WQu|$hWQ$pWQuujPjjVL$̋U]̋USVMڋMWMQEujEEPu}ӥQQuM_^[̋U SVWu‰MQQuE؅~ ہˉ]UuQE}jEEPuQQuM;_^[̋UkE,‰A]̋UjhdPVWtT3PEde12<;t)Md Y_^̋UhUytT3ʼnES]EVuW}ShMShU SjPVjWQRS7M_^3[Gb̋U\xtT3ʼnEVWEWQuWQWQuujPjjVM_3^a̋UEVxHrQPS:Mh9.M}ErEuЋPLh9 M}ErEuPvLh9Lj ILMIMAt ́rVq#+΍Aw ^RQ_YY̋VVrBfF^̃aaA 9̍AP lY̋UVu^]̋U MhLEP_x̍A#;Vȅt A#H%́V3̋̋UQQESVWccxHMrEs j_;;wOUˉuMAQuVwM KÉ{_^[jwCsJ wU$'Q;y*yyyyjFyyjZty urh(9MeUŘϘ՘ۘjX+t&t$tttjjjX3@̋UJ $8APuu v ]EE EE XEE X֋EE X ɋME AXAًME AXAXA ˋE ]땋U$Ǚԙ++̋UJ $APuu u ]EE E@E@E@ EM @Y@YY 뻋ME AXAXA X 띋E x\뙋U$|֚ht9$̋UQSVWM;_;vMvȉwEMG4VuQtE3Ƀ f r7]E,Ӌ+;w4;rNw떍U&_^[ B̋UQSVW3ۋM3j^_wQfff;u+;w4 OVuWs 3f>u]uQ_^[̃yr ̋A̋USV3WjXPCCD$Pg D$Wt$|$hD$hjYK 3PqXq\_slÉsp^[]jnuQwu 3NtE,AArNn̋VNt^ ̋UVNtEt hVYYY^]̋U SVW}E_r?sX@GùM;v=AMUu ]QWV!rM EYA_^[HEvd̋VVrUlf3Ff^j0m}uVV3OtE,AAFtPl̋UVWϋVPhW@WQphxEpPq2̋UUMxE] jX̋UEE %]̸9̸ 4̸PjP*lu] ˋ}jFVEf5PM/ejVO5PMjEEP.E5WcCh9WC}ErEuPBh94C}ErEuPBh9C}ErEuЋP|Bh9B}ErEuPYBh9B}ErEuP6Bh9B}ErEuPBh9B}ErEuЋPAh9bB}ErEuPAh9?Bj AExt:3WBh9BWBh9Aj ]AM]MUMMi j$X̋UEE ]̸:̸3̋U}]̸P̋UEt]jwjiE@8t8uih(:MUeU ̋U UVuWt|$U L$3\$FR\$F\$ F \$$D$PePD$D$ ^D$^D$_^ ^] ̋UMT$(IVWu t+}L$uu |$ ;suM}u }_^]j+*hEu ΋}jPl1PM5eE1W?h9?}ErEuP>h:b?j >Mcg ̋UQU]EzB]EAzYB]EAAuYB ]EA AuY kt2Q QQ̋UQM]Ez{2AzA Az2ð̋UA A]EA]E]E(\t$2]RRR Ri]EE]]]AA]]EZEZEZ EZEZjX̋UEE X&]̸:̸4̸ Pjw:eE@s<%tdh;MeUj8mdu] ˋEj~VE&.PMejV.PMh;E--u&<h;<h<<4%;h<;j_E9}rEuЋP[;h<;E9}rEuP9;h9;j ;E-u;h<;E9}rEuЋP:h0<a;E9}rEuP:h8<?;j :MM8c jX̋UEE &]̸P≮,4̸̰P̋UE`UdUXhUXlUX ] ̋U`U]dU]hU]lUVW}u]`Uu}]dU]hU]lU]_^j4*bEH9sys @8u hX<MeUah<MEŰUVW}OA=P=PQM W+M *u9h99M jW*P&h:8j R8_^] jXX̋UEE &]̸ ≠<4̸Pjw`E@xPt xPtxPuL`h4=MeURjTj`}u ΋]jGWE)PMoejq(Ћ̃a$t I$Rhd=h EP $jEp(Ћ̃a$t I$Rht=jEE؋P#h=E((SB7h967}=Pt=P7h=7}ErEuPz6h<6}ErEuЋPW6h<6}ErEuP46h96j 6Tt1S6h96S{6h9o6j 5MMM`^ ̋UQSVWX$Et-3;؋NP<V;t)E`$_^[̋U}tjZ ]̍A̸Q̋UEVW} 0@?_^]̋UE]̸\Q̋UVuW} j6Y?_^]̋UE]̋UEE ]̸≠,5̸P̋UE ,\z2]j8m\E3] }VHMP%PMVE؉uPh=E%%W3h93}ErEuЋP^3j;=3j 43Ext:d%W3h93W3h93j 2*%Wv3h=j3Wb3h<V3}ErEuP2h933j 2MM,[ ̋UQM]]Ez{2̋UQQ3MS]VW{CCC A Q+uSAPq<;t)EE@Pq <;t)ȋEt6uu.CEK CC>H(+H$KfH_^fK[%ȑ̸≯L4̋UEHjY;]̋U}]̸PjwYE@ s<0'tMYh>MeUS̋UE8t 8t2]̋UPUE S]TU[XU[\U[ wMPVW$@UMd&UMeE@+qu6_^[ I)j@;zX}] ˋEjwWE!PMeh>v!}EErEEˋ0'Ee!u/h9/u/h:/j .3@E9G PW)!PME!uL/h>@/u6/j(.}ErEuP.h< /u/h9.j U.MEQE@E;G ZM9V ̋UEE ]̸?̸5̸ PjLVu} ϋ]jVPMejVPMjEEPiES-h9-h ?-}ErEuP<-<W-}ErEuЋP-W-}ErEuP,h9k-j ,MMM\U ̋UQSVW3h(?u؅uQj-hP?SFuQjhd?Su$QjVQ:Ex8tS|_^[jTZ3S]Аu95 Zu ZKy Qj8VQ%: ZSܐ]T̋V>t 6ܐ&^j(X̋UEE @]̸?̸\4̋U}]̸$PjPSUʋu }jdujdu2(̃a$t I$Rh?j4EPeEjPjEEPh@EW*h(@*h?*<W*}ErEuP>*W*}ErEuЋP*W*}ErEuP*h9r*j )MMMcR ̋UQM]Ez]{2̋UQM]^Ez]{2̸Q̋UEQQM @\$$]̋UE]j,X̋UEE h]̸d@̸l4̸(Pjh*QU3ۋu ʋ}Saujaӄt(̉Y$t I$Rh?j4EPjE]PjEEPjEEPh@EW(ht@(h?(<W'j[E9]rEuP^'W'E9]rEuP@'W'E9]rEuЋP"'W'E9]rEuP'h9v'j &MMMM_O ̸R̋UE]j 4O3PPESE@E츟ËE%øøW ļøNjWGOU EM3Pu EtpE03`E!ËEaN ̋A +A̋Aj NM3juA#ȉMY71؅ts@ss sމ]EtS0<;t)3MCPEE MuN3EËEM̋UVN"Et jVy8YY^]jMej3 :u AuD$D$ C;XsL$3_^[]jFى]E3CCC CCECCC E{$j,}YGUΉuNNfF 7K,E3>jYEO)txxxx xPZE̋VWwD&cO8Ww$&Gw&3O_^%̋Vh&^̋UVNQEt jVY0YY^]̋SVWK,SC {$7ωCvW_v36vG_^CC[hEuRhehaMt.hD̋V񍎄aN,N$ANN ^z̋USVW8܉EGp<O;t)}jH^u􋟄MC +C;sS kHQss +v)C+C}Q;v QKP ыK +$#C G܋?EGp(<O;t)]j_C+;sSkQ3ps(v&C+Q;v QS+΋ыKt"C3u9u]3ɉMx@ +Ǚ};9 CVLjuECx <K;t)]t]C}w+w K0VHKV<GW +tbCH<@@+tKuABuVBQj 2MFjHXȉuM;u_^[̋UQQSVWu ]Sˋ0Vuh@K,FjpVG V܋8p,<;t)}tG]S{H h@KqOPh:lj _^[̋U SVW8܉EGp<O;t)E܋E8Wr <O;t)]UJЍ{ O7+};s#v$G+Q;v R  +ыOGEK0p+p V+KV<3ۅtME@H<@@+M;v;uE] uEe}t(EP uSV.wo MQMp EPuSVM;8jLS;MEu ΋}EE}uEV!E3EEԉEMk P 2ҋ%ЋʍqAu+QRM="j(M 3tttjh<M"E]E]EDz2tqQM$ExHrQPM!MEvF;rj)M; }EԋMI,rEPuuWM@9h@M-UEjx9]u E]uEewIeϋ|EPuEVPMEGH$@(+u1P|Mp eEMGEEPuwN;N tEEAEPU F0 EPQN u2ҋOeEEEAEAu+MQRMP jh=B }MrMuQ+ jh,A }O,ErEPuVSYMMMM984 ̃̋U SVыM WUzEuj[3ۃÍr;N,tF( EPQN$ N(3ҋE+F$uҋE^$++;r#v$F,+;ЍEv PRN$ QP+F(EM,8EPu u}uE_^[jw7fU j ^f;tAf9pu fP7h0AMneU#̋UQQE8@EEEP ̋UQESVW8HMt':܋Gp <O;t)M_^[̋U,]C̋Q,Yjw6EM @ ȋt9tuBQ-PN jf PhAjE qNF5hAMAeUjw6}u tVQhHt tu.PVhAj#jVhAjVhAjEq5 hBMeUw̋UEVpAPN M^HM@H]j"5ى]M'MeeE@EC@Pq<;t)M؋IIQr <;t)M }PhBSR<;t)yPh8BM\Ey MQP<;t)y Ph8BQMUM3Ph8BKj(O/4E؍N,P93ۉ]Ep]ԍMExtEЋN}8ErE؋URQShhtBSMQShBuP<;t)y Ph8B!M(M螾>3Ph8BM̋UjhdPVWtT3PEdet !Rp<;t)Md Y_^̋UjhdPVWtT3PEd};tt O;>etPƋMd Y_^̋VpVxj,Z^Y̋UA+‹M;v]̋VtV+у3FF^̋UA+‹M;v]x̋UAV1+jYM;v k^]H̋Vt(VQI F+jYk~3FF^̋UAV1+jHYM;v kH^]̋Vt(VQ F+jHYkH3FF^̋UUVWN>+;s#v$F+Q;v R +ыNQF_^]̋UUVWN>+;s#v$F+Q;v R# +ыN-F_^]̋UXtT3ĉD$TEVWL$0PhO$;tF$;tG$N$,d$,L$WvVnD$PbL$L$0wL$\_^3]j/ى]c$Ee@$Et"S8<M;t)C$>/̋USY$VWu3E PENP<V;t)_^[]̋UQESW_;wJ9GtEsE+uPo_/s*r$V7CPVWS3W B۹G^_[̋US;]t#VWEjY`_@^[]̃aAhB ̋VNtAFȅu!F W~FO tjZ uN_t V ff^̋UQQ;QsyBAr EDuEuQ̃iua ̍A̋UQESVWX$Mt:;u/Qx<;t)MA$MY$`$_^[̋UQQS]VWF++=NP+U+;w;s=wrȉE M f _f VQW9UtU{ VCQMPk t V+у蜷MÉ> ONM_N^[Lj,EUUU+j0YEF+;XF+ϋ+;vÉE; ;sÉ]k0ȉE&kM0U e}ωMA0EBABPVQW9UtU VQuM tVQ F+j0Yk0膶Ek0>ωNMωN)+uuuu jj/j̋UQQSVWF+=t`@PEȉE.E+ˍM VQW;t VCQMP uuW_^[̋̋UeSًM VW3֋~ u)1Njf9ps e@ Ex tދ3z uff;Br E@B{]tt@QEMPQVSMMp`VuW1MA_^[r̋USW} ـ u+Vwu?Nj,Z趴 t^_[]̋U USVWK+M;rkC<WˉE|N脵M{A}EsQr3VP- W0ESP- UZ_^[v̋U SٸVWK+MCyWˉEN}{}EsWr.3VP-M UE9D9R舳E"SP,MUE 9D9褴_^[ ̋VW l;u_^̋VW H;u_^̋VNt #N^tj,Z̋UAESVuF;u3ssF } u p;Cu s0;u3FWGP;u7PRz t1;xuWG@ G@@ Gp1Hz u@ B G@@ Gx(;8uWG@ G@@ Gp5Gx hC_@ ^[] hB$̋UVt V+豱ME FEF^] ̋UQ++;w;EsE]̋UU QM]̋UkU 0M7]̋Itj,Z̋UUV2FFx uPBF;PupB;Pup0Vr^]̋UUVrBx uPBF;PupB;u0pr^]j`%uE3j,]Y^FHBQEEQu; NU pNeNZFX FX $̋UQQSVW};NF++E+;vWȉEװ؋׋E+Q bVQSt V+у~FE_F^[ ;r;v-w̋UQ} MwTA+SVWj^uSDUQk+uQWV1SuW_^[jZϮ̋UQQSVW}8;F+jHYEF+ˋ+;vkkHȉE褯QkMH؋+UVQStVQ'F+jHYkH9kH_ÉFEÉF^[;r;v1̋UQQSVW};NF++E+;vWȉE؋׋E+Q ;VQSNt V+у芭FE_F^[ ;r;v9̋UQQSVW}?;NF++E+;vWȉE5؋׋E+Q VQSt V+уܬFE_F^[ ;r;v苭̋UQ}EwNSVp+0Wu؋褭UQu +֍ 7{uQWVFSuW_^[g̅t3 AűVtfFuQ֋^̋SWtVVw3jHPW Hj XfF3FFvHFFFĉFȉF̉FЉFԉF؉F܉FFFFu^Q׋T_[̋VWtQjV' 4_^̋VWtQjV 4_^̋UVWu+}_^]̋UEVWWPV >_^]̋VW N=0;u_^̋UQ‰EVu;t1SWy+ًG ;Gf,WF00O;Mu_[Q֋^̋USVW}W+__^[]̋VN;r^_]̋UQQS]VWw\GSEN詣SuEP_wu ErPR7 U艣_^[ 襦̋UQVW} ;~w$~SrWu~S{ ;[uEuW;_^̋SVW9܋p<;t)_^[̋UAQ+‹M;v]%̋UVuj0^H@+U ^;v k0]̋AH#̋A j4C0щUЉUċuJ3UBEȉEB BZCCB B$B(VEFEԋp<M;t)KЋ3+;s4֋SQs&v$C+Q;v R +ыKC]ԋp <;t)}ЋjYMԍw F+;sk&v'F+}Q;v S+ыN?Ft~3ɋuЋ]]ĉUԋ~ QN-x&NPtQQ%tHjYuEEWW_ W_MȋUAjXЉMȉU;r}Ћ3h0CM脤UE9̋UVEt j,VYY^]̋VN }N~tvN tN^=̋UA$Vq +jYM;v k^]-̋UED$E D$ ED$EL$L$D$EVD$}yMVhC$^]̋SQQUkl$eVEWpj_}HA(+A$;kA$EpE@MEE؋ Py<M;t)tmMA;EubUzhjy`E}r jY@@EjYEp @$+ƙM;%kjYuuEJAzeGp(<O9et)3ɋEMjY8Uu3 Ѓ th@ h u0pjV3ɋGwtPzE}OB8Eu^QJEe8r@<9et)"ut Q@YUWrPy} wMWENEQMp 蟞FEtu<U;t)uURMWE8teuI &j0A+AY3MEt9PuI Ћ ;OuEJEQJ0E@E;ErNjuM@FM܋U_F^][QLhELP?̋U SVWuK ]A+A uIEM;tls8KW΋u u JQr x4<;t)tE]Es;Eu2_^[̋UQQSVWuN NSFω} 3҉Eʋ4;}u>EAuNu uWE EJR E EE_^[̋UQQEMMVEyM3VhC7^̋UEMEMEEE Ex UM̋UEMEMEEVxEUjEe܋xGp(<O;t)3ɋj_u O؉]EthPV׋ 3ۉ]SuEQMVEx}󥥥 QhPQrtSYE  QMEjt6Y;u_^̋IVAAp@+;v D^3̋VqWFBz+;v(υu QJ SN 1PF0Z 3_^}̋Vqv 53^̋Ujh dPVWtT3PEd tQ0<;t)Md Y_^̋U SVu W;G+jYMEG+ˋ+;v^kȉEQkM؋+U;WQStG+}kkÉGEÉG_^[;r;vn̋UQQSVW};N+^++;vcȉEoQ׉E+Ӎ ]VQStVQV+ FE_F^[ ;r=v超̋UE;tVW;u_^]̋WtVkVjWe ^_̋Vt&fuQ֋^̋UVWu +jǙY_k^E]̋UVu;tW+!D7F;u_Q֋W^]̋UjhdPtT3PEdu h uQQhd7k̋UjhdPVWtT3PEd=tY3ɈMt6EPQQEP<;t)yMd Y_^h>QM=̋UQShM^؄tYu/Dz$ADzADz A D{2R RRtVW_^qum]EAuA]EBAuZA]EBzZA ]EB zZ ذ[̋U SV3ۋMWu]zff;u]+׋=tY3CCtCEP+PQPEP<;t)M}쥥u쥥ut"QQSuQQhC}_^[ >MD\QuESuEu쥺QQMhCli̋UstT3ʼnEE3VWQQfRP PM3ͥ_^̋UjhdPtT3PEdQu iMd YQQY ̋UQQSVWM3ۋEp<M;t)3ɋE;u AuE |r3_^[̋U$E]A]A]A MP]EEEXEXEX ̋UE E ]̋UQQSVٍEWP3EPND<VD;t)E_^[̋UQQSVٍEWP3EPND<VD;t)kE_^[E̋UQPUSVW3TU^XU^\U^ C+t'ω}PCG+MM;r_^[PUTUYXUY\USY C+t8V3WC3+G;vj^P‹CG+;r_^[̋UEE \]̸C̸<5̸,Pj8Qu} ϋ]jVPM~ej(Ћ̃a$苏t I$RhCjEP虶E踻ShC}ErEuPchD}ErEuЋP@h<}ErEuPh8<j M|M| ̋UQM]]Ez@]{2̸R̋UQEH]$E ]E̋UE]̃!a3f̍Axr̋UMSVWa؅uZ&]p <;t)K-؅u&E jp<M;t)_^[]̋A+A̋UU"BABAB A BA]̋UUA;BuA;BuA ;B u A;Bu2]̋UU"BABA]̋UEI;H]j(}uЋM3ủFEFFEtuu P h DMBUE̋UEIfI]U_^K B C B!J K!C!J![̋USVW} F3ۉ^tPSHPPUM ^!ۉVÍ F:F rI3f9 w fBf;vF!f9 u1fBf;u(fBf;FuB:FufBf;Fu B :Fuu13fffBfFfBFBfFfBFB F F_^[] QM:j,@3ۉ]G ]EfGfE܊GE3fEfGfEȊGE3]]]fEЉ]ԉ]?9]v8wEPMt%uEЍMPuEPug*tF;urwEPMuM *Hjpu}] WuSut{G 3ҍN9uPUUUU UPMt'E+EPjuENePo"F"MF 8V"tP@uWuSu_̋UfA3fEAS]Vu E3MUfEUUtGWA qMÉEEPuMu'~ ]+Mu_^[̋U MSVuW3fMfGO fEGE3EEEt`G3+E V;vPVO uuRu u ;sgwE]PMuMug\] E9Fv:wE]PMt-uMu6E~(E]@E;FrƋ_^[MQ9EuEÄtEMEPu 8_ u3G 3̋USVW}s t)C3+CO;vPOs E HfC3fECE3ufEuu9wvsE PMtF;wrVvE _^[̋U4SVWwfG3fE GE3MfEMM},u MuEuPwEuPM؄uuw3҄u!E M!UfEEEEfGM̃efE̊GE΋EEЋEfEԋEE_‰EӋG+;#ʋU;+ڍ 2++tquL"ZuuuuPuu}u6.t;s"PVQ GE}GuPEPM?}t EM@PwMQMG x2_^[̃ B̋UjhdPX7tT3ʼnESVWPEdكӃMAPAPAPAPPePDžPPQ3t3!hPPH̉ t$M$t]+jQQQ=uGƅ5t+jjQQPM@u;s2r @Md Y_^[M3Ħ̃l@̋SVjj[SjSj8jSjSjN$(jjjSjNH^[̋U4tT3ĉD$0V~ tCJL$D$JD$JD$ JVD$JjD$JZD$D~DtFIL$D$ID$ID$ ID$ID$ID$F$PjZ~ht|IL$D$ID$ID$ ID$ID$ID$ID$ID$ ID$$ID$(ID$,ID$0FHPjZvL$4^3.]̋UQQE3VqW F>+t<JMt6;rE ΉEEEEjP6t F+M_^ E M׋ELM̋UQQ} WtEVWАuV}ؐGW+‹M Iu^;s $dM00M/_̋UjhdPVWtT3PEdu}W}M~+~.3uEME܉M3!MPMАuؐ;s'E@<u Fu;r DFMEuMm/Et u<M;t)uM+.E;{Md Y_^̋Ujh dPVWtT3PEd4wpN$ ̋UE %S3ۃt]uEWjYu3}RuUM_t]}tˀ}t@[ ̋UE ЋM%Vuuuu ,:@tQPV,"$u=t RЋ( QPV,^]̋U}uu ,u] ,]/̋UEy=,t%%|=,tPPh<#]̋UVW=XZu =TZt#uuu u<;t)_^]̋UVW=LZtuRQ<;t) =HZu!9_^]̋UVW=DZu =@Ztu<;t)_^]̋VWjO6O8t2O(l2O\ OT O_^{̋UjhdP VWtT3PEd?tEZutw$G W_>u33FwM"3Md Y_^̋UM]̋UjhdPSVWtT3PEdًs Ƌ{+ǃr+;tWQ;u{3{ PPhPMd Y_^[̡Tu Tj!.=PZoYt'tB1wjRS<;t)u39>tu QT#9~v WvvS9~uD}=Tt8TVؐ=TuujTPaM4!O ̹T5̋UMd Y^̋UjhGdPQQVWtT3PEdt(EeUEp]MV'NjMd Y_^̋UjhdPQQtT3PEdtEeUMEp]OMd Y̋UjhdPVtT3PEd teNtvMd Y^̋UjhdPQQtT3PEdtEeUME0ZMd Y̋UQQtUEMEC'̋UuE jPjEPA] ̋UjjE PjEP] ̋UEtRjHPP]̋UjhGdPQQVWtT3PEdt(EeUE pMVEMd Y_^̋UjhdPQQtT3PEdtEeUME pMd YhQ3hPhH8hPhS]PSP9u x] Pg"Ey&Pt)AW[yȺ.MVhd7̋UQWtuaOW EOP!u7SV3ۍOSSO SM!WSHPP^[MV_̋S30 HP,48<@DHfLL|x<,[̋VWOQO O~O_^t̋USVW}jUY'$؉]uMVhd7Bc]3ɉMMuaQPQVMyMEVhd7,EPue3MMM} _^[̋UQQSVEP]QQ]u^[̋U3PPPu4ju0]%8̋UUVW3hF:U WFB:F FPz ~NNb_^]j '"u<EEPEPUԃ}؉]ȉtu3ʁ 3ȃu3%3ȃE;EuuY!]8TtNTSؐMT]t";ujEEPT}{ujX!MUu 3ʁ 1̋UVu EP3EQEEQPEPN  PRk^ ̋US`ZVW}u \Zt`u jhoY<;t)37w?j@Z#  t33҃&3Ή7j@wZ#   ‹ ȋlj_^[]̋UkE ‰A]̋SY@VWtp <;t)_^[̋USY@VWt9xEPEPEPE PEP<;t)_^[]& ̋Ua@i5tVWAxPu_A@^] ̋USW;u>?u)Vjuht,P$V^jhӋ_[]̋UQW} ?t"VwVؐMuG!A^_ ̋USW;u>?u)Vjuht,PV^jhӋN_[]̋UQW} ?t4VwVؐuw|F+ r _FMG ^_ ̋USW;u>?u)VjuhPu,PV^jhӋ_[]̋UM 2] ̋UQQVWjEPe}}wwF+j Y;v Wlj YtQ}} SF;Ft`` NP^jCPjKQmj Yu}[_^h̋UQSVWjD$P|$ wRF+;vWt/ߋF;Ft FPNQM uӋ_^[]̋UQSVWjD$P<|$ wRF+;vWt/ߋF;Ft FP NQM MuӋ_^[]f̋UQSVWjD$P|$ |$ wwkF+jY;vWtE3ɋ} F;FtHHH HFPNQLjYuƋ|$ _^[]ű̋UQSVj [F+EEuPEPq@FE;t>W{ EwuVGPqMuWVq ;]u_^[̋UQQVWF+D$ D$t$ PD$Pq~6 MV;u_^]̋UQQVWF+D$ D$t$ PD$Pqe~6 MV];u_^]̋UQSVWj[F+EEuPEPqF>E;tj_ EsuVCPqMuSVqMsuVSqMuCPVq;}u_^[̋UQQSVWF+M;tw@PE;wj/M+MU ϋ JHVQEW9UtUuEVQMPsuSuWE_^[jx̋UQQSVW?F+M;tq@PE衹;wdM+MM E VQW9UtU uEVQMPtSuWE_^[(j̋V1W2<;t)_^̋UVt V+уME FEF^] ̋UQ++;w;EsE]̋UVt V+уFME FEF^] ̋UEV<t jVzYY^]̋UEV<t jVzYY^]̋USVWj C+YuSQ VuWV%_^[]̋USVWjC+Yu"SQ VuWV臶_^[]̋USVWu{+;職SQ VuWV_^[]̋USVWu{+;@SQ V޸uWVN_^[]̋US]VuWyMuE+] A+;+U+;PEgȉE}UΉE+EQM PE'nu ;u QuMQuMnEQËPmuMuu1gJ+Q;s#+WmM֋]WAQS3PmMQVAUM m_^[f̋UVW}qP_^]̋USًCS;r-EVWEQK 8EW0E VER0:_^tC[]̋UQQSVWj YF+Ù=UUUtn@PEȳPEE+j Yk 3QW9CCVE;t VC QMPuuW!_^[e̋UQQSVWF+=?t^@PE}PE襴M+QW#V9UtU-VCQMPuuW苴_^[e̋UQQSVWF+=?t^@PEPEM+QW#V9UtUsVCQMPcuuWc_^[d̋UQQSVWjYF+Ù= tt@PEȲPEE+jYk3QW9CCC CVE;t藴VCQMP致uuW_^[c̋UE+RQ+P$ ]̋UQQtEUME̋UQQtEUܐME̋UjhdPSVWtT3PEdx3RuCYt1W<;t)t==t~ NjMd Y_^[̋Ujh dPtTQ3PEdhuQQhG̋UQQtEUME̋VQ,3fFtdž^̋UjhWDQphxEpPjX̋UEE d']̸J̸|4̸0Pj W"jMu }j;(Ћ̃a$4%t dI$Rh;jEE؋PBLeaQW_h9_}ErEuP _j;^j ^M肇 ̸R̋UE VuW6@ _^@XHX]̋UEd]j8X̋UEE ']̸K̸4̸4Phh"׆Eu ]jHP PPeh0hPj jPyjE_GPPoIPKsWbGPPIIPNW=WP'IPK+WHr@OS]hKz]rP\h9K]j \S:]hC.]j \3A0A1A2A3th$K\j 8\5(Kt#S\j. \[AP h0Kv\h8Kj\Sb\j.[[j)[h<7\Q h@K\Q2 FH9V[j :[S[hHK[S[V[j [y4t-S[h9[S{[Vs[j Zh0j jEPoX j X̋UEE p]̸xK̸4jX̸8Pjw E@xtxu袂hKMeŰUQUM~U zu(Mu P]QQ]ET$$E ̋UEMVu W} P]]EuQQT$$J؋MEuPsMI_^uEQQT$$ ̋UQE]^z ] UEAE z]EYA]Au ] UEYA Au]EY ̋UQM]Ez]Au]2̋U!U;t"BAbBA]j4I#血ى]̉]؋E]EЋE E3E{}j YGGj U܋Ήux Np wO 31qqEGGwj8s$s(s,C0s0E؉s4s8seexEPSQ<;t)MMttA}jx<;t)MM^ ]%eEMu? EPh8V<;t)EMtx}܋?p<;t)uMM EPhp8V<;t)MM eEEPM M ]Us4K0:eEEyMQP<;t)M-M  Ejx<;t)E܋E8p<;t)EuEuu ]EEEK 9u9At;KuG;Cu EPK : Ejx<;t))E]M@LM9t;uG+C0+s0E;s\Ejx<;t)E]MM@ELEMPI l RuRDEEjz<;t)E]M@LME M= MM1 EC];X MAh0HMoEUhPMMVEPhK!rh0HM6Eh0HM#E hAME &PhK,p hLMEUPhKVj%op] xDEPEP<;t)39]vm3ɉMEeEMexEPSQ<;t)Mx4E puu:MMMCM;]roPhKUj NM_N^[=̋UQQESVWj Y+UUUEF+;XF+ϋ+;w;s;k ȉEq3kE QWljEHHVE;tEV QMPtVQ'F+j Yk Ek >ωNM_N^[UUM]E3E^E_^^C̋UQQE \V]EUP]]EAu ]\dP^^̋UM B`YB`Y]̋UE E x)]̸Q̸4̸HPh&WEu ]jHP!Pe0h0hPjjPJEH3WPPK(vGPP]Pb(Q0 rw S.hK.,r(P.h9.j -Sq.hCe.j -3A A!A"A#Hth$K.j o-5(Kt S-j.B-5-VAPh9-S-j. -,h9-F069VG-j ,S6-hHK*-S"-V-j {,y$t-S,h9,S,V,j B,h0jj0EP A&T ̸R̸4̸LPj+TEu ΋}jP PMehRW%,h4R,}ErEuP+h9+j W+MWS ̋UEE ]̸LR̸5̸PP̋UQE %]]E,\z2j4=SEu ΋}jPPMeEjP`EW*h9*}ErEuЋP?*h9*}ErEuP*h:*j )MMR j'Ru3>~~~ N}/N$E#~8~<~@NDER̋UQV3ujYFFF FRȉuUƉ1^̋V ^Vj['Qju 3}}u2$}h`RE{)} u hhRf)MPT)j (uh}tAhtR.)P)?tj.{(RPl(j)c(j;Z(j Q(EP̋UQVM KuuPuE^Y]j$'PE}] jPEԉ}P3ҍN8UA;AtP@AP_v<}tjhR7S7j p"}ErEuP7EԋP$8MrP̋UQVu2uM _PuE^Y]j['O3Wu}}u9}E}Dt hRt'u j'j &u~th9G'W?'h:3'j &EOj+uOًEMP\{esU؋:u;suj$;Cu"CMQ;C t 6C PKYMN̋VqDh`R&^j'N}MXeMhRV&j ^VM%hRM=&VM%VM%_G;t%h>M1%j(M$VM$_<w83uj,Mp$j Mf$h`RM$VM 2;uh,AM$j M0$j{M&$j M$GDPM$j}M$j M#uMx%MjU؃e#EgLj8(Lًu3ɋE uMĉNFEE3GM}+t(+t+t+Wh8SWh4SWh0SWh,S33}j j fEP3MQAu+ʍEQPu3jhtSe3uo2K h}jhZhD[[3@@^̃H̋UU 3At;t B;wCuR3uQ'=u}u"3uHjuȋ] HHHH3̸U̸UHHHH3; tTuL̋Uu:Y]̋Uj$u(h P]̋U$jtjY)V VVV5V=|VfVf VfxVftVf%pVf-lVVEVEVEVUVUU UUjXkǀUjXk tTLjX xTLhj hCuE] Ë}NjuueO}t+uM<UEEMd Y_^[}] uEu uWSVjhD3u}u;ut>+} }M<UFEEEEE8csmt'EEËeEMd Y_^[ MEp 0g ̋UEVH<AQAk(;tM ;J r BB ;r (;u3^]Ë̋Vt dXP;t3u2^ð^rtXP? Yt2V jYu2uۮ֮̋Uu} uuMPu<Uuu YY]t hX Y臚C jaY[̋U}uX9u2],u j!Y]̋U=Xt]Vutubt&u"hX YuhX Yt+20 X X X X X XX^]jjh(D eMZf9u]<PEuL f9u>E+PQgYYt'x$|!EE3Ɂ8ËeE2Md Y_^[̋Ut}u 3X]̋U=Xt} uu説u袬YY]̋U=Xuu hXYY#E]̋UuYH]̋UEVtV4Y^](jYthY3j)̋VWhhXh3luhXltFh3Vh3Vtt=XX_^3PPjPXujhXXtP@̋UVXVА pTEA pTVd, Y pTܐ^]`̋UVWXWАu>u)jdqY>td, Y pTWܐ_^]̋V5XthX<^5X5X^̋UV5XtuhXhX<$XVܐju5XVА^]jhHDr3ۉ]]];]tM<MUE EC]EEMd Y_^[]EuuSu uhd5D$l$l$+SVWtT1E3PeuEEEEdËMd Y__^[]Q̋UVu6 uuu VhhtTy^]̋U%X$ Tj e3SVW3ɍ}S[wO3ɉW E܋}EntelE5ineIEE5GenuE3@S[]܉Es EKS uCE%?=t#=`t=pt=Pt=`t=pu=X=X=XMjXM9E|03S[]܉sKMS ]t=X]TXTXTtytq3ЉEUEMj^#;uWTXT t; XT#;uEM#;u T@5X_^[33@39T̋U$SjtM)j$jPH |xffftfpflfhEEDž@jPEjPE E@EEjXۍEEۉE$EP(u uj Y[̃%Y%%%%%%%ܑ%ؑ%p%t%x%|%%%%%%%%%%%đ%ȑ%̑%Б%ԑ%̋Uuuuu upQy]̋Uujuu u]̋Uuuuu u$p0qy]̋Uuuuuu up0- y]̋Uujuuu u]̋UEPuuu uS]̋UE t3t tt3@0uuY}PY] jhhDIj]Y E]e=XXctM|h+h+/YYu)t h+h+YYX2ۈ]E=uCk>tVYtu ju6<Y3@]uY3Md Y_^[jjhD<Y3iHY3G}eE}=Xuk%Xe9juYY#uE"ƋMd Y_^[Ë}u0YËujHj hD} u9=Y3et t]1]SWuuSWuuSWuuu"uSPuɶSVuPSVuptuHSWu3ut5SWuJ$MQ0huu uTËe3uEƋMd Y_^[̋UV55u3@uu u<^] ̋U} upuu u ] ̋UeEeP$E3EE1E1EEPEM3E3E3̋ tTVWN@;tu&;uO@u G ȉ tT_ xT^hYXhYzY.H$H,HH̸̋SVpepe;sW>t <׃;r_^[̋SVxexe;sW>t <׃;r_^[%% ̋UQ=X|f}t }uT]E?t?uét*uéué uøËE̋D$L$ ȋL$ u D$S؋D$d$؋D$[̋Md Y__^[]Q̋M3Pd5D$ +d$ SVW(tT3PuEEdPd5D$ +d$ SVW(tT3PEuEEdPd5D$ +d$ SVW(tT3PeuEEd3̋Md Y__^][QQL$ \$ \$ PD$#`C$CPCPCl$l$D$ #+VWtT3PAM]CEudEEdQL$+#ȋ%;r Y$- $̃=X| $XU<$D$L$f?ry6f@sff>@3+3wy =u^ɸÍd$=X|>z,w^v ̃ $$vL$3^U<$D$L$r"f?r"y&f@sff>@f?s3^ɸÍ$$=X|̃ $$T$U<$$T$L$f?r6yUf>@s5ff>@؀ r3f|$}؃33Í Uw u f|$}^ɺ3̃=X|Cz0w^v1̃ $$T$vL$3^U<$$T$L$r.f?r.y4f?@s-ff>@؀ r3f?s 33^ɸ%%%%̐T$B 3+J3!X+̐T$B J3|+̐T$B J3+̐T$B J3X+n̐T$B J3X+K̐T$B J3rX+(̐T$B J3O,̐T$B J3,X+̐T$B J3 ,̐T$B J3X+̍|;o̐T$B 3J3(-Q̐T$B J3x\-.̍MM̐T$B J3@J36-̍Mԋ̐T$B J3J3-̋Md̐T$B J3-̍MTMLMD̐T$B J3J3.8̍M ̐T$B J3RJ3HP.̍MЃMȃ̐T$B J3J3|.̍M養M霊̐T$B J3J3.z̍MLMDM<̐T$B J3J3z.0̍MM̐T$B J3BJ38 /̍MM鸂M鰂̐T$B J3J3T/̍Mz̐T$B J3/t̍MFM>M6M.̐T$B J3vJ3l/"̐T$B J3I0̐T$B J3&0̍M鹩̐T$B J30j̍Mbju}YYÍMMMzMy̐T$B J3+J3!=̍MMMMMyMyMyMyMyMwy̐T$B |3J3>R̍M~̐T$B J3l>"̍MD~MyMxMx̐T$B J3$J3>̍MM̐T$B J3?̍MxMxxMMhxM`xMXxM`MHxM@x̐T$B J3rJ3h8?̐T$B J3EX+̍MMۂ̐T$B J3 ?̍ph0jj0P<̐T$B 3J3?m̋M2MM$M8̐T$B J3c@̋E eMo̐T$B J3"T@̍Mo̐T$B J3J3@̍MG̐T$B J3@n̋Eă eM0oÍM=v̐T$B J3oJ3e@̍MnMnMnMn̐T$B J3J3 A̍`nxnMnM}nDDM_nËDDH=nÍM4n̐T$B 83yJ3oPA%̍`mxmMmMmMmMm̐T$B X3J3A̍Hm`~mxsmMkmMcmM[mMSm̐T$B @3J3BD̍MmMm̐T$B J3VJ3LpB̍M̐T$B J3B̐T$B J3B̐T$B J3\Cjte Pt c̹T`hZ̹,e?̹T'>""+++P\x@}x" ,,,T,, Pz PAz@iz Pz PzP{@*{",``" -`"L-"-`"-(0"-j" ."8."t.".X`"."/"D/&."x/hpx"/"/"$040H0 P P $$$`$$$$$$$">%">4%L%D%<%"$?%%" `?%%%%%%%%%"?[&c&"@&&"4@&&& '"x@='"@~'"@'"@'("0A;(C(K(S(" xA((((((((("A1)<)G)O)W)_)"8B)))))))"B**"BT*"BC@@.?AV@@.?AV@@.?AV@@.?AVout_of_range@std@@.?AV@@.?AV@@.?AV@@.P6GXPBXPAX@Z.?AV@@.?AV@@.?AV@@.?AV@@.?AV@@.?AV@@N@D*H8*ܛԚxJ:|Zl&ƛDl~X̟Ξ84TfN*v^ʝ~$lМ*6BN\xƘ(P^l|L™̙ܙfT>"8B*̖LZv`x4pVؔ:h@dАH Рx"D@f@ĕT,p&L0H8lȐ80(Д `,֣$ȔX*H8*ܛԚxJ:|Zl&ƛDl~X̟Ξ84TfN*v^ʝ~$lМ*6BN\xƘ(P^l|L™̙ܙfT>"8B*̖LZv?_Xlength_error@std@@YAXPBD@Z?_Xbad_function_call@std@@YAXXZ?_Xout_of_range@std@@YAXPBD@Zmsvcp_win.dllapi-ms-win-crt-runtime-l1-1-0.dll__CxxFrameHandler3&__std_terminate_o___std_exception_copy_o___std_exception_destroy_o___std_type_info_destroy_list_o___stdio_common_vsnprintf_s_o___stdio_common_vsprintf_s_o___stdio_common_vswprintf_o__cexit>_o__CIcosD_o__CIpowE_o__CIsinG_o__CIsqrt_o__configure_narrow_argv_o__create_locale_o__crt_atexit_o__errno_o__execute_onexit_tablec_o__initialize_narrow_environmentd_o__initialize_onexit_tablef_o__invalid_parameter_noinfog_o__invalid_parameter_noinfo_noreturn_o__itoa_s_o__ltoa_ss_o__purecall_o__register_onexit_function_o__seh_filter_dll_o__wcsicmp_l_o_ceilR_o_terminate__current_exception__current_exception_context2_except_handler4_commonmemsetapi-ms-win-crt-private-l1-1-0.dllapi-ms-win-crt-string-l1-1-0.dllGetModuleFileNameA CreateSemaphoreExWHeapFree SetLastError&ReleaseSemaphoreGetModuleHandleExW6WaitForSingleObjectGetCurrentThreadId#ReleaseMutex FormatMessageWGetLastErrorOutputDebugStringW7WaitForSingleObjectEx!OpenSemaphoreWCloseHandleHeapAllocGetProcAddress CreateMutexExW GetCurrentProcessIdGetProcessHeapGetModuleHandleWDebugBreakIsDebuggerPresent RoOriginateErrorWInitializeCriticalSectionDeleteCriticalSectionLoadLibraryW FreeLibraryEnterCriticalSectionLeaveCriticalSectionWindowsDeleteString WindowsDuplicateString WindowsGetStringRawBuffer RoOriginateErrorAcquireSRWLockExclusive$ReleaseSRWLockExclusiveAcquireSRWLockShared%ReleaseSRWLockSharedSetThreadpoolTimer CreateThreadpoolTimerInitializeCriticalSectionEx"WaitForThreadpoolTimerCallbacksCloseThreadpoolTimerWindowsSubstringWithSpecifiedLengthCCoTaskMemFreeLoadResourceLockResource!SizeofResourceWindowsCreateStringRaiseExceptionWindowsCreateStringReferenceRoGetActivationFactoryQueryPerformanceCounterRtlCaptureStackBackTraceTerminateProcessOnMemoryExhaustionRaiseFailFastExceptionTTerminateProcess GetCurrentProcessUTerminateThreadGetCurrentThreadUnhandledExceptionFilterSetUnhandledExceptionFilter1IsProcessorFeaturePresentInitializeCriticalSectionAndSpinCount)SetEvent'ResetEventCreateEventWapi-ms-win-core-libraryloader-l1-2-0.dllapi-ms-win-core-synch-l1-1-0.dllapi-ms-win-core-heap-l1-1-0.dllapi-ms-win-core-errorhandling-l1-1-0.dllapi-ms-win-core-processthreads-l1-1-0.dllapi-ms-win-core-localization-l1-2-0.dllapi-ms-win-core-debug-l1-1-0.dllapi-ms-win-core-handle-l1-1-0.dllapi-ms-win-core-winrt-error-l1-1-0.dllapi-ms-win-core-libraryloader-l1-2-1.dllapi-ms-win-core-winrt-string-l1-1-0.dllapi-ms-win-core-threadpool-l1-2-0.dllapi-ms-win-core-com-l1-1-0.dllapi-ms-win-core-winrt-l1-1-0.dllapi-ms-win-core-profile-l1-1-0.dllapi-ms-win-core-rtlsupport-l1-1-0.dllapi-ms-win-core-errorhandling-l1-1-3.dllapi-ms-win-core-errorhandling-l1-1-2.dllapi-ms-win-core-processthreads-l1-1-1.dllFindResourceAapi-ms-win-core-kernel32-legacy-l1-1-0.dll#DbgPrintExNtQuerySystemInformation%DbgPromptntdll.dll8_initterm9_initterm_eGetSystemTimeAsFileTimeInitializeSListHeadapi-ms-win-core-sysinfo-l1-1-0.dllapi-ms-win-core-interlocked-l1-1-0.dll_CxxThrowExceptionmemcmpmemcpymemmove  *N p8Ph6       0 @ P ` p   P7$x o .Ip/ 36K@= COMMON.HLSL D2DBLEND.HLSLD2DBORDER.HLSLD2DCOLORMATRIX.HLSLD2DCOMPOSITE.HLSLD2DCONTRAST.HLSLD2DDISPLACEMENTMAP.HLSLD2DLIGHTING.HLSLD2DLUMINANCETOALPHA.HLSLD2DSATURATION.HLSL D2DSEPIA.HLSL NOISE.HLSL// Copyright (C) Microsoft. All rights reserved. // HLSL implementation of D2D blend functions. // See: http://msdn.microsoft.com/en-us/library/windows/desktop/hh706313.aspx #if !defined(COMMON_HLSL) #define COMMON_HLSL // Macro for minimum-precision types (min10float, min16float) #if defined(MINP_PREFIX) # define minp(type) MINP_PREFIX##type #else # define minp(type) type #endif #define minfloat minp(float) #define minfloat2 minp(float2) #define minfloat3 minp(float3) #define minfloat4 minp(float4) #define minfloat2x2 minp(float2x2) #define minfloat3x2 minp(float3x2) #define minfloat3x3 minp(float3x3) #define minfloat4x4 minp(float4x4) // Alpha premultiplication and un-premultiplication minfloat4 Premultiply(minfloat4 color) { color.rgb *= color.a; return color; } minfloat4 UnPremultiply(minfloat4 color) { // We follow D2D's way of handling alpha = 0 color.rgb = (color.a == 0) ? float3(0, 0, 0) : (color.rgb / color.a); return color; } // Must match dwmcore-side CommonFragments_PSLib version float2 GetInvTextureSizeFromSamplerDataExt(float4 samplerDataExt) { return samplerDataExt.zw; } #endif// Copyright (C) Microsoft. All rights reserved. // HLSL implementation of D2D blend functions. // See: http://msdn.microsoft.com/en-us/library/windows/desktop/hh706313.aspx #include "Common.hlsl" // // Helper constants: // static const minfloat3 g_luminosityWeights = minfloat3(0.30, 0.59, 0.11); // Helpers inline minfloat D2DBlendGetLuminosity(minfloat3 color) { return dot(g_luminosityWeights, color); } inline minfloat D2DBlendSafeDivision(minfloat f, minfloat b) { if (f == 0) { return b == 0 ? 0 : 1; } else { return b / f; } } inline minfloat D2DBlendAlpha(minfloat f, minfloat b) { // O_A = F_A * (1 - B_A) + B_A return f + b - f * b; } // Blend premultiplied f and b together with the color from the color function inline minfloat3 D2DBlendBasicRgb(minfloat4 f, minfloat4 b, minfloat3 func) { // O_PRGB = f(F_RGB, B_RGB) * F_A * B_A + F_RGB * (1 - B_A) + B_RGB * (1 - F_A) return saturate(func * f.a * b.a + f.rgb * (1 - b.a) + b.rgb * (1 - f.a)); } // Restricts the gamut of colorRgb with the given luminance to a 0-1 range. inline minfloat3 RestrictGamut(minfloat3 colorRgb, minfloat luminance) { const float Epsilon = 1e-10; // out-of-gamut processing minfloat3 colorNeutralRGB = luminance.xxx; minfloat3 negativeFactor = -colorRgb / (colorNeutralRGB - colorRgb); minfloat3 positiveFactor = (1.0 - colorRgb) / (colorNeutralRGB - colorRgb); // Extract the highest values for rgb's that are < 0 or > 1 minfloat3 t3 = max( (1.0 - step(0, colorRgb)) * negativeFactor, step(1.0 + Epsilon, colorRgb) * positiveFactor); minfloat t = max(max(t3.x, t3.y), t3.z); return lerp(colorRgb, colorNeutralRGB, max(0, t)); } // Converts an RGB color to an HSL color. The output vector has .xyz = HSL inline minfloat3 RgbToHsl(minfloat3 colorRgb) { minfloat3 colorHsl; minfloat flMax = max(colorRgb.r, max(colorRgb.g, colorRgb.b)); minfloat flMin = min(colorRgb.r, min(colorRgb.g, colorRgb.b)); // L colorHsl.z = dot(colorRgb, g_luminosityWeights); // S colorHsl.y = flMax - flMin; // H colorHsl.x = (colorHsl.y == 0.0) ? 0.0 : (flMax == colorRgb.r) ? ((colorRgb.g - colorRgb.b) / colorHsl.y) : (flMax == colorRgb.g) ? (2.0 + (colorRgb.b - colorRgb.r) / colorHsl.y) : (4.0 + (colorRgb.r - colorRgb.g) / colorHsl.y); return colorHsl; } // This function applies the provided luminosity value to the dest, replacing dest's luminosity. // We pass in destSat as an optimization, so we don't need to recalculate it: inline minfloat3 D2DBlendApplySourceLumToDest(minfloat3 dest, minfloat destSat, minfloat sourceLum) { minfloat destLum = D2DBlendGetLuminosity(dest); minfloat lumDifference = sourceLum - destLum; minfloat3 color = dest + lumDifference.xxx; minfloat factor1 = destSat - destLum; minfloat factor2 = 1 - sourceLum; return lerp(sourceLum + (((color - sourceLum.xxx) * sourceLum) / destLum), lerp(sourceLum + (((color - sourceLum.xxx) * factor2) / factor1), color, step(factor1, factor2)), step(0, lumDifference)); } // This function generates a new RGB output, taking its hue, saturation, and luminosity from the three RGB inputs. inline minfloat3 D2DBlendApplyHueSatLum(minfloat3 hueSource, minfloat3 satSource, minfloat3 lumSource, minfloat3 lumFallback) { // // We need to calculate the min and max of the hueSource and satSource. To save instructions, pack // these two values into vectors, allowing for the comparisons for both to be done in parallel. // minfloat2 red = minfloat2(hueSource.r, satSource.r); minfloat2 green = minfloat2(hueSource.g, satSource.g); minfloat2 blue = minfloat2(hueSource.b, satSource.b); minfloat2 minSD = min(red, min(green, blue)); minfloat2 maxSD = max(red, max(green, blue)); minfloat destSat = maxSD.y - minSD.y; minfloat sourceMax = maxSD.x; minfloat sourceMin = minSD.x; // We need to figure out which componenet contributed to the max value. We do this by // calculating floor(1 - (max - source)), which will result in a unit vector with a value // of one for the source's max component. const minfloat3 vectorOneMin = minfloat3(1, 1, 1); minfloat3 sourceMaxVector = floor(vectorOneMin - (sourceMax.xxx - hueSource)); // Similar calculation for min: minfloat3 sourceMinVector = floor(vectorOneMin - (hueSource - sourceMin.xxx)); // If we had a tie for max or min, we want to disambiguate. It doesn't matter which value we // pick as the tie breaker, so we use saturate(sourceMaxVector.rgb - sourceMaxVector.gbr), // which guarauntees only one component has a 1: sourceMaxVector = saturate(sourceMaxVector - sourceMaxVector.gbr); sourceMinVector = saturate(sourceMinVector - sourceMinVector.gbr); // We can calculate the mid-value vector and value once the min and max vector are known: minfloat3 sourceMidVector = vectorOneMin - sourceMaxVector - sourceMinVector; minfloat sourceMid = dot(sourceMidVector, hueSource); // color is our output value: minfloat3 color = minfloat3(0, 0, 0); // This is just trying to do (sourceMax - sourceMin) > 0 && destSat > 0, but that takes too many // instructions, so we do the following instead: if ((sourceMax - sourceMin) * destSat > 0) { color += sourceMidVector * ((sourceMid - sourceMin) / (sourceMax - sourceMin)); color += sourceMaxVector; color *= destSat; color = D2DBlendApplySourceLumToDest(color, destSat, D2DBlendGetLuminosity(lumSource)); } else { color = D2DBlendGetLuminosity(lumFallback).xxx; } return color; } //----------------------------------------------- // Blend functions, in order of reference webpage inline minfloat3 D2DBlendDarkenRgb(minfloat4 f, minfloat4 b) { // Does not need alpha unpremultiplication return min((1 - f.a) * b.rgb + f.rgb, (1 - b.a) * f.rgb + b.rgb); } inline minfloat3 D2DBlendMultiplyRgb(minfloat4 f, minfloat4 b) { return D2DBlendBasicRgb(f, b, UnPremultiply(f).rgb * UnPremultiply(b).rgb); } inline minfloat3 D2DBlendColorBurnRgb(minfloat4 f, minfloat4 b) { // This accomplishes the following without branching (14 instructions vs. 20): // // if (source == 1) return 1; // if (source + dest <= 1) return 0; // else return 1 - ((1 - dest) / source) minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = uf + ub - 1; // note: it is ok if some colorU channels are zero because those failed quotients will not be chosen below minfloat3 color2 = color / uf; [unroll] for (int i = 0; i < 3; i++) { color[i] = (b[i] >= 1.0) ? 1.0 : (color[i] > 0.0) ? color2[i] : 0.0; } return D2DBlendBasicRgb(f, b, saturate(color)); } inline minfloat3 D2DBlendLinearBurnRgb(minfloat4 f, minfloat4 b) { return D2DBlendBasicRgb(f, b, saturate(UnPremultiply(f).rgb + UnPremultiply(b).rgb - 1)); } inline minfloat3 D2DBlendDarkerColorRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = D2DBlendGetLuminosity(uf) < D2DBlendGetLuminosity(ub) ? uf : ub; return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendLightenRgb(minfloat4 f, minfloat4 b) { // Does not need alpha unpremultiplication minfloat3 color = max((1 - f.a) * b.rgb + f.rgb, (1 - b.a) * f.rgb + b.rgb); return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendScreenRgb(minfloat4 f, minfloat4 b) { // Does not need alpha unpremultiplication return f.rgb * (1 - b.rgb) + b.rgb; } inline minfloat D2DBlendColorDodgeComponent(minfloat f, minfloat b) { return (f < 1.0) ? (b / (1.0 - f)) : ceil(b); } inline minfloat3 D2DBlendColorDodgeRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = minfloat3( D2DBlendColorDodgeComponent(uf.r, ub.r), D2DBlendColorDodgeComponent(uf.g, ub.g), D2DBlendColorDodgeComponent(uf.b, ub.b)); return D2DBlendBasicRgb(f, b, saturate(color)); } inline minfloat3 D2DBlendLinearDodgeRgb(minfloat4 f, minfloat4 b) { return D2DBlendBasicRgb(f, b, saturate(UnPremultiply(f).rgb + UnPremultiply(b).rgb)); } inline minfloat3 D2DBlendLighterColorRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = D2DBlendGetLuminosity(uf) > D2DBlendGetLuminosity(ub) ? uf : ub; return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendOverlayRgb(minfloat4 f, minfloat4 b) { // This accomplishes the following without branching: // // if (dest < 0.5) return 2 * source * dest; // else return 1 - 2 * (1 - source) * (1 - dest); minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = lerp(2 * uf * ub, 2 * lerp(uf, 1, ub) - 1, round(ub)); return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendSoftLightRgb(minfloat4 f, minfloat4 b) { // This accomplishes the following without branching: // // if (source < 0.5) return dest * (1 + (1 - dest) * (2 * source - 1)) // if (dest <= 9/64) return ((9 * g_vectorOneMin16 - 18 * source) * dest + 5.76 * source - 1.88 * g_vectorOneMin16) * dest; // else return dest + (sqrt(dest) - dest) * (2 * source - g_vectorOneMin16); // // lerp is used to simulate if/else conditions. minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = lerp(ub * (1 + (1 - ub) * (2 * uf - 1)), lerp(((9 - 18 * uf) * ub + 5.76 * uf - 1.88) * ub, ub + (sqrt(ub) - ub) * (2 * uf - 1), round(ub + (0.359375 - 0.001))), round(uf)); return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendHardLightRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = lerp(2 * ub * uf, 2 * lerp(ub, 1, uf) - 1, round(uf)); return D2DBlendBasicRgb(f, b, color); } inline minfloat D2DBlendVividLightComponent(minfloat f, minfloat b) { minfloat c = f + 0.5 * (b - 1); return (f < 0.5) ? ((f > 0) ? (c / f) : 0) : ((f < 1) ? (0.5 * b / (1 - f)) : 1); } inline minfloat3 D2DBlendVividLightRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = minfloat3( D2DBlendVividLightComponent(uf.r, ub.r), D2DBlendVividLightComponent(uf.g, ub.g), D2DBlendVividLightComponent(uf.b, ub.b)); return D2DBlendBasicRgb(f, b, saturate(color)); } inline minfloat3 D2DBlendLinearLightRgb(minfloat4 f, minfloat4 b) { minfloat3 color = saturate(UnPremultiply(b).rgb + 2 * UnPremultiply(f).rgb - 1); return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendPinLightRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = lerp(min(ub, 2 * uf), max(ub, 2 * uf - 1), round(uf)); return D2DBlendBasicRgb(f, b, color); } inline minfloat D2DBlendHardMixComponent(minfloat f, minfloat b) { float sum = f + b; return sum < 0.999 ? 0 : sum > 1.001 ? 1 : b >= f ? 1 : 0; } inline minfloat3 D2DBlendHardMixRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = minfloat3( D2DBlendHardMixComponent(uf.r, ub.r), D2DBlendHardMixComponent(uf.g, ub.g), D2DBlendHardMixComponent(uf.b, ub.b)); return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendDifferenceRgb(minfloat4 f, minfloat4 b) { return D2DBlendBasicRgb(f, b, abs(UnPremultiply(f).rgb - UnPremultiply(b).rgb)); } inline minfloat3 D2DBlendExclusionRgb(minfloat4 f, minfloat4 b) { // Does not need alpha unpremultiplication return f.rgb + b.rgb - 2 * f.rgb * b.rgb; } inline minfloat3 D2DBlendHueRgb(minfloat4 f, minfloat4 b) { minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = D2DBlendApplyHueSatLum(f.rgb, ub.rgb, ub.rgb, ub.rgb); return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendSaturationRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = D2DBlendApplyHueSatLum(ub.rgb, uf.rgb, ub.rgb, ub.rgb); return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendLuminosityRgb(minfloat4 f, minfloat4 b) { minfloat3 color; minfloat3 source = UnPremultiply(f).rgb; minfloat3 dest = UnPremultiply(b).rgb; minfloat destLum = D2DBlendGetLuminosity(dest); minfloat sourceLum = D2DBlendGetLuminosity(source); minfloat lumDifference = sourceLum - destLum; color = dest + lumDifference.xxx; color = RestrictGamut(color, sourceLum); return D2DBlendBasicRgb(f, b, color); } inline minfloat3 D2DBlendColorRgb(minfloat4 f, minfloat4 b) { return D2DBlendLuminosityRgb(b, f); } // TODO: Dissolve inline minfloat3 D2DBlendSubtractRgb(minfloat4 f, minfloat4 b) { return D2DBlendBasicRgb(f, b, saturate(UnPremultiply(b).rgb - UnPremultiply(f).rgb)); } inline minfloat3 D2DBlendDivisionRgb(minfloat4 f, minfloat4 b) { minfloat3 uf = UnPremultiply(f).rgb; minfloat3 ub = UnPremultiply(b).rgb; minfloat3 color = minfloat3( D2DBlendSafeDivision(uf.r, ub.r), D2DBlendSafeDivision(uf.g, ub.g), D2DBlendSafeDivision(uf.b, ub.b)); return D2DBlendBasicRgb(f, b, color); }// Copyright (C) Microsoft. All rights reserved. float4 WrapUV4(float4 uv, float4 samplerData) { float4 uvBounds = GetUVBoundsFromSamplerData(samplerData); float2 size = uvBounds.zw - uvBounds.xy; float2 min = uvBounds.xy; // If the signedMod is negative, we must fix it up to wrap it into // positive space. float4 signedMod = fmod(uv - min.xyxy, size.xyxy); float4 wrapped = lerp(signedMod + size.xyxy, signedMod, step(0, signedMod)); return wrapped + min.xyxy; } float2 WrapUV2(float2 uv, float4 samplerData) { return WrapUV4(uv.xyxy, samplerData).xy; } export float2 BorderEffectClamp(float2 uv, float4 samplerData) { float4 uvBounds = GetUVBoundsFromSamplerData(samplerData); return clamp(uv, uvBounds.xy, uvBounds.zw); } export float2 BorderEffectWrap(float2 uv, float4 samplerData) { return WrapUV2(uv, samplerData); } export float2 BorderEffectWrapBilinear(float2 uv, float4 samplerData) { // delay the wrapping until the sampling stage return uv; } export float2 BorderEffectMirror(float2 uv, float4 samplerData) { float4 uvBounds = GetUVBoundsFromSamplerData(samplerData); float2 size = uvBounds.zw - uvBounds.xy; // We can just take the abs of the signedMod, as this mirrors around 0. float2 signedMod = fmod(uv - uvBounds.xy, size * 2); float2 wrapped = abs(signedMod); return uvBounds.zw - abs(wrapped - size); } // If clamping is not the same in both directions export float2 BorderEffectCombine(float2 uvHorizontal, float2 uvVertical) { return float2(uvHorizontal.x, uvVertical.y); } // Internal wrappers (no export) float2 ApplyBorderCC(float2 uv, float4 samplerData) { return BorderEffectClamp(uv, samplerData); } float2 ApplyBorderCM(float2 uv, float4 samplerData) { return BorderEffectCombine(BorderEffectClamp(uv, samplerData), BorderEffectMirror(uv, samplerData)); } float2 ApplyBorderMC(float2 uv, float4 samplerData) { return BorderEffectCombine(BorderEffectMirror(uv, samplerData), BorderEffectClamp(uv, samplerData)); } float2 ApplyBorderMM(float2 uv, float4 samplerData) { return BorderEffectMirror(uv, samplerData); } // returns 2 u coordinates, in x and z // and 2 v coordinates, in z and w. // These coordinates can be used to sample the texture. The texture samples // should then be weighted by the output weights. float4 CalcWrappedUV( float2 uv, float4 samplerData, float4 samplerDataExt, out float2 weights ) { float2 textureSize = GetTextureSizeFromSamplerDataExt(samplerDataExt); float2 invTextureSize = GetInvTextureSizeFromSamplerDataExt(samplerDataExt); float2 uvTexture = uv * textureSize; float2 uvClosePixel = floor(uvTexture) + 0.5; float2 signedWeights = uvTexture - uvClosePixel; float2 uvFarPixel = uvClosePixel + sign(signedWeights); // The weights will be always be between 0 and 0.5. If they are 0, we should // use the close pixel, so we put the close pixel in xy. weights = abs(signedWeights); float4 uvs = float4(uvClosePixel, uvFarPixel) * invTextureSize.xyxy; return WrapUV4(uvs, samplerData); } float4 SampleWrappedTexture( Texture2D tex, SamplerState textureSampler, float2 uvs, float4 samplerData, float4 samplerDataExt ) { float2 weights; float4 uvsWrapped = CalcWrappedUV(uvs, samplerData, samplerDataExt, /*out*/ weights); float4 color0 = tex.Sample(textureSampler, uvsWrapped.xy); float4 color1 = tex.Sample(textureSampler, uvsWrapped.zy); float4 color2 = tex.Sample(textureSampler, uvsWrapped.xw); float4 color3 = tex.Sample(textureSampler, uvsWrapped.zw); return lerp( lerp(color0, color1, weights.x), lerp(color2, color3, weights.x), weights.y ); } float4 SampleWrappedTextureUOnly( Texture2D tex, SamplerState textureSampler, float2 uvs, float4 samplerData, float4 samplerDataExt ) { float2 weights; float4 uvsWrapped = CalcWrappedUV(uvs, samplerData, samplerDataExt, /*out*/ weights); float4 color0 = tex.Sample(textureSampler, float2(uvsWrapped.x, uvs.y)); float4 color1 = tex.Sample(textureSampler, float2(uvsWrapped.z, uvs.y)); return lerp(color0, color1, weights.x); } float4 SampleWrappedTextureVOnly( Texture2D tex, SamplerState textureSampler, float2 uvs, float4 samplerData, float4 samplerDataExt ) { float2 weights; float4 uvsWrapped = CalcWrappedUV(uvs, samplerData, samplerDataExt, /*out*/ weights); float4 color0 = tex.Sample(textureSampler, float2(uvs.x, uvsWrapped.y)); float4 color1 = tex.Sample(textureSampler, float2(uvs.x, uvsWrapped.w)); return lerp(color0, color1, weights.y); } // Copyright (C) Microsoft. All rights reserved. #include "Common.hlsl" minfloat4 D2DColorMatrixStraight(minfloat4 color, minfloat4x4 colorMatrix4x4, minfloat4 colorOffset) { return mul(color, colorMatrix4x4) + colorOffset; } minfloat4 D2DColorMatrixPremultiplied(minfloat4 color, minfloat4x4 colorMatrix4x4, minfloat4 colorOffset) { return Premultiply(D2DColorMatrixStraight(UnPremultiply(color), colorMatrix4x4, colorOffset)); } // Copyright (C) Microsoft. All rights reserved. // HLSL implementation of D2D composite effect modes. // See: http://msdn.microsoft.com/en-us/library/windows/desktop/hh706320.aspx #include "Common.hlsl" inline minfloat4 D2DCompositeSourceOver(minfloat4 src, minfloat4 dest) { return src + (1 - src.a) * dest; } inline minfloat4 D2DCompositeDestinationOver(minfloat4 src, minfloat4 dest) { return (1 - dest.a) * src + dest; } inline minfloat4 D2DCompositeSourceIn(minfloat4 src, minfloat4 dest) { return dest.a * src; } inline minfloat4 D2DCompositeDestinationIn(minfloat4 src, minfloat4 dest) { return src.a * dest; } inline minfloat4 D2DCompositeSourceOut(minfloat4 src, minfloat4 dest) { return (1 - dest.a) * src; } inline minfloat4 D2DCompositeDestinationOut(minfloat4 src, minfloat4 dest) { return (1 - src.a) * dest; } inline minfloat4 D2DCompositeSourceAtop(minfloat4 src, minfloat4 dest) { return dest.a * src + (1 - src.a) * dest; } inline minfloat4 D2DCompositeDestinationAtop(minfloat4 src, minfloat4 dest) { return (1 - dest.a) * src + src.a * dest; } inline minfloat4 D2DCompositeXor(minfloat4 src, minfloat4 dest) { return (1 - dest.a) * src + (1 - src.a) * dest; } inline minfloat4 D2DCompositePlus(minfloat4 src, minfloat4 dest) { return src + dest; } inline minfloat4 D2DCompositeSourceCopy(minfloat4 src, minfloat4 dest) { return src; } // D2DCompositeBoundedSourceCopy not supported because we // don't have a notion of input bounds. inline minfloat4 D2DCompositeMaskInvert(minfloat4 src, minfloat4 dest) { return (1 - dest.a) * src + (1 - src.a) * dest; }// Copyright (C) Microsoft. All rights reserved. #include "Common.hlsl" minfloat4 D2DContrast(minfloat4 color, minfloat contrast) { color = UnPremultiply(color); // (Math from D2D) // This builds two contiguous polynomials forming an 'S' shape // in the box from (0, 0) to (1, 1), and passing by (0.5, 0.5) // TODO: Do this up-front on the CPU (MSFT:3579391) float s = 1 - (3.0f / 4.0f) * contrast; float c2 = s - 1; float b2 = 4 - 3 * s; float a2 = 2 * c2; float b1 = s; float a1 = -a2; minfloat3 lowResult = color.rgb * (color.rgb * a1 + b1); minfloat3 highResult = color.rgb * (color.rgb * a2 + b2) + c2; // Use a single componentwise comparison to select per-channel results. color.rgb = (color.rgb < 0.5f) ? lowResult : highResult; return Premultiply(color); }// Copyright (C) Microsoft. All rights reserved. #include "Common.hlsl" float2 DisplacementMap(float2 uvToDisplace, minfloat4 displacement, float4 samplerDataExt, minfloat scale, uint selectX, uint selectY) { float2 dispSelected = saturate(float2(displacement[selectX], displacement[selectY])); return uvToDisplace + (dispSelected - 0.5) * scale * GetInvTextureSizeFromSamplerDataExt(samplerDataExt); } // Copyright (C) Microsoft. All rights reserved. #if !defined(D2DLIGHTING_HLSL) #define D2DLIGHTING_HLSL #include "Common.hlsl" // The default normal is <0,0,1>. static const float3 c_defaultSurfaceNormal = float3(0.0f, 0.0f, 1.0f); // This is the default normal encoded in premultiplied RGBA8888 for use in SceneLighting. static const minfloat4 c_defaultNormalHeight = minfloat4(0.5f, 0.5f, 1.0f, 1.0f); inline float3 GetSurfaceNormal(float4 normalHeight) { normalHeight = UnPremultiply(normalHeight); float3 normal = normalize(normalHeight.xyz * 2 - 1); // Flip the Y axis, because the standard normal map tools assuming the Y // in texture coordinate is pointing up, but our Y are pointing down. normal.y = -normal.y; return normal; } // Not being used until we add functionality for image lighting with normals. inline float GetSurfaceHeight(float4 normalHeight, float heightMapScale) { return normalHeight.w * heightMapScale; } inline void PreparePointVectors(float3 pixelXY, float3 lightPosition, out float3 pixelPosition, out float3 lightVector) { pixelPosition = float3(pixelXY.xy, 0.0f); lightVector = normalize(lightPosition - pixelPosition); } inline void PrepareSpotVectors(float3 pixelXY, float3 lightPosition, float3 lightTargetVector, float focus, float2 cosConeAngle, float3 lightColor, out float3 pixelPosition, out float3 lightVector, out float3 spotLightColor) { pixelPosition = float3(pixelXY.xy, 0.0f); lightVector = normalize(lightPosition - pixelPosition); spotLightColor = lightColor; float cosDirection = saturate(dot(-lightVector, lightTargetVector)); // Compute attenuated light color from the position and exponent spotLightColor *= pow(cosDirection, focus); // Then cut off the light based on the spotlight cone: // - if the lightVector is in the inner cone, we'll get full power (1) // - if the lightVector is in the outer cone, power will fade to 0 // - outside of the outer cone, power will be 0 spotLightColor *= smoothstep(cosConeAngle.y, cosConeAngle.x, cosDirection); } inline float CalculateLitPixelDiffuse(minfloat3 surfaceNormal, minfloat3 lightVector) { return max(dot(surfaceNormal, lightVector), 0); } inline float3 CalculateBlinnPhongLitPixelSpecularUnpremultiplied(minfloat3 surfaceNormal, minfloat3 lightVector, minfloat exponent, minfloat3 eyeVector) { float3 output; if (dot(surfaceNormal, lightVector) > 0) { float3 halfVector = lightVector + eyeVector; halfVector = normalize(halfVector); float nDotH = max(dot(surfaceNormal, halfVector), 0); output = pow(nDotH, exponent); } else { output = 0; } return output; } inline float4 CalculateLitPixelSpecular(minfloat3 surfaceNormal, minfloat3 lightVector, minfloat exponent, minfloat amount, minfloat3 lightColor, minfloat3 eyeVector) { float4 output; output.rgb = CalculateBlinnPhongLitPixelSpecularUnpremultiplied(surfaceNormal, lightVector, exponent, eyeVector) * amount * lightColor; // This computes a specular component, meant to be blended atop a diffuse layer, // so the alpha channel is not opaque output.a = max(output.r, max(output.g, output.b)); // Premultiply the RGB channels output.rgb *= output.a; return output; } inline minfloat4 D2DDistantDiffuse(float3 surfaceNormal, minfloat3 lightVector, minfloat diffuseAmount, minfloat3 lightColor) { return float4(CalculateLitPixelDiffuse(surfaceNormal, lightVector) * diffuseAmount * lightColor, 1); } inline minfloat4 D2DDistantSpecular(float3 surfaceNormal, minfloat3 lightVector, minfloat specularShine, minfloat specularAmount, minfloat3 lightColor) { // use 0,0,1 for the eye vector since this function is used for Image Lighting return CalculateLitPixelSpecular(surfaceNormal, lightVector, specularShine, specularAmount, lightColor, minfloat3(0,0,1)); } inline minfloat4 D2DPointDiffuse(float3 surfaceNormal, minfloat3 pixelXY, minfloat3 lightPosition, minfloat diffuseAmount, minfloat3 lightColor) { float3 pixelPosition; float3 lightVector; PreparePointVectors(pixelXY, lightPosition, pixelPosition, lightVector); return float4(CalculateLitPixelDiffuse(surfaceNormal, lightVector) * diffuseAmount * lightColor, 1); } inline minfloat4 D2DPointSpecular(float3 surfaceNormal, minfloat3 pixelXY, minfloat3 lightPosition, minfloat specularShine, minfloat specularAmount, minfloat3 lightColor) { float3 pixelPosition; float3 lightVector; PreparePointVectors(pixelXY, lightPosition, pixelPosition, lightVector); // use 0,0,1 for the eye vector since this function is used for Image Lighting return CalculateLitPixelSpecular(surfaceNormal, lightVector, specularShine, specularAmount, lightColor, minfloat3(0,0,1)); } inline minfloat4 D2DSpotDiffuse(float3 surfaceNormal, minfloat3 pixelXY, minfloat3 lightPosition, minfloat3 lightTargetVector, minfloat focus, minfloat2 cosConeAngle, minfloat diffuseAmount, minfloat3 lightColor) { float3 pixelPosition; float3 lightVector; float3 spotLightColor; PrepareSpotVectors(pixelXY, lightPosition, lightTargetVector, focus, cosConeAngle, lightColor, pixelPosition, lightVector, spotLightColor); return float4(CalculateLitPixelDiffuse(surfaceNormal, lightVector) * diffuseAmount * spotLightColor, 1); } inline minfloat4 D2DSpotSpecular(float3 surfaceNormal, minfloat3 pixelXY, minfloat3 lightPosition, minfloat3 lightTargetVector, minfloat focus, minfloat2 cosConeAngle, minfloat specularShine, minfloat specularAmount, minfloat3 lightColor) { float3 pixelPosition; float3 lightVector; float3 spotLightColor; PrepareSpotVectors(pixelXY, lightPosition, lightTargetVector, focus, cosConeAngle, lightColor, pixelPosition, lightVector, spotLightColor); // use 0,0,1 for the eye vector since this function is used for Image Lighting return CalculateLitPixelSpecular(surfaceNormal, lightVector, specularShine, specularAmount, spotLightColor, minfloat3(0,0,1)); } inline float EncodeReflectanceModelAndTransparentNormal(int reflectanceModel, minfloat4 normalHeight) { // Bit 0: a bool to store if this pixel is a fully transparent // Bit 1: Reflectance model. Blinn Phong (the default value) = 0, Physically Based Blinn Phong = 1 return reflectanceModel * 2 + (any(normalHeight) ? 1 : 0); } float4 SceneLightingParameters(minfloat4 normalHeight, minfloat ambientAmount, minfloat diffuseAmount, minfloat specularShine, minfloat specularAmount, int reflectanceModel, out float4 outputNormalTangentSpace) { outputNormalTangentSpace = float4(GetSurfaceNormal(normalHeight), EncodeReflectanceModelAndTransparentNormal(reflectanceModel, normalHeight)); return float4(ambientAmount, diffuseAmount, specularShine, specularAmount); } #endif // Copyright (C) Microsoft. All rights reserved. #include "Common.hlsl" minfloat4 D2DLuminanceToAlpha(minfloat4 color) { color = UnPremultiply(color); // RGB to luminance factors from D2D float luminance = dot(color.rgb, minfloat3(0.2125f, 0.7154f, 0.0721f)); return minfloat4(0, 0, 0, luminance); } // Copyright (C) Microsoft. All rights reserved. // HLSL implementation of the D2D saturation effect. #include "Common.hlsl" static const minfloat3 grayFactor = minfloat3(0.2126, 0.7152, 0.0722); inline minfloat4 D2DSaturation(minfloat4 color, minfloat amount) { // Math from https://www.w3.org/TR/filter-effects/#saturateEquivalent // and https://www.w3.org/TR/SVG/filters.html#feColorMatrixValuesAttribute // In D2D, if amount is // 0 -> Fully desaturated // 1 -> Original color // 2 -> Maximum possible value, not necessarily fully saturated minfloat gray = dot(color.rgb, grayFactor); return minfloat4(lerp(gray.rrr, color.rgb, amount), color.a); } inline minfloat4 D2DGrayscale(minfloat4 color) { // Math from https://www.w3.org/TR/filter-effects/#grayscaleEquivalent minfloat gray = dot(color.rgb, grayFactor); return minfloat4(gray, gray, gray, color.a); }// Copyright (C) Microsoft. All rights reserved. #include "Common.hlsl" // Straight-alpha version inline minfloat4 D2DSepiaStraight(minfloat4 color, minfloat intensity) { // Math from https://www.w3.org/TR/filter-effects/#sepiaEquivalent minfloat4 result; result.r = minfloat( (1 - 0.607 * intensity) * color.r + (0.769 * intensity) * color.g + (0.189 * intensity) * color.b); result.g = minfloat( (0.349 * intensity) * color.r + (1 - 0.314 * intensity) * color.g + (0.168 * intensity) * color.b); result.b = minfloat( (0.272 * intensity) * color.r + (0.534 * intensity) * color.g + (1 - 0.869 * intensity) * color.b); result.a = color.a; return result; } // Premultiplied-alpha version inline minfloat4 D2DSepiaPremultiplied(minfloat4 color, minfloat intensity) { return Premultiply(D2DSepiaStraight(UnPremultiply(color), intensity)); }// Copyright (C) Microsoft. All rights reserved. float Hash(float2 p) { // Magic numbers for hashing the coordinates // This line of code is from https://www.shadertoy.com/view/4dS3Wd. It uses a very high frequency sin // to produce a periodic change between pixels. And then take the fractal part as a random number. // The theroy is from a paper On generating random numbers, with help of y= [(a+x)sin(bx)] mod 1", // W.J.J. Rey, 22nd European Meeting of Statisticians and the 7th Vilnius Conference on // Probability Theory and Mathematical Statistics, August 1998. return frac(1e4f * sin(17.0f * p.x + p.y * 0.1f) * (0.1f + abs(sin(p.y * 13.0f + p.x)))); } float4 WhiteNoise(minfloat2 inputCoord, minfloat2 freq, minfloat2 offset) { // Use this magic number to adjust the frequency of the white noise. When moving slowly, the artifact // is reduced much. const float COORD_SCALING = 0.81f; float2 coord = inputCoord * COORD_SCALING * freq + offset; float2 pixel00Coord = floor(coord - 0.5f) + 0.5f; float2 pixel11Coord = pixel00Coord + 1; float2 pixel10Coord = float2(pixel11Coord.x, pixel00Coord.y); float2 pixel01Coord = float2(pixel00Coord.x, pixel11Coord.y); float2 factor = coord - pixel00Coord; float sample00 = Hash(pixel00Coord); float sample10 = Hash(pixel10Coord); float sample01 = Hash(pixel01Coord); float sample11 = Hash(pixel11Coord); float result = lerp(lerp(sample00, sample10, factor.x), lerp(sample01, sample11, factor.x), factor.y); return float4(result.xxx, 1); } 4VS_VERSION_INFO |O |O?StringFileInfo040904B0LCompanyNameMicrosoft CorporationdFileDescriptionMicrosoft Composition Effectsn'FileVersion10.0.20348.5386 (WinBuild.160101.0800)6 InternalNamewuceffects.LegalCopyright Microsoft Corporation. All rights reserved.> OriginalFilenamewuceffectsj%ProductNameMicrosoft Windows Operating SystemDProductVersion10.0.20348.5386DVarFileInfo$Translation <0@0H0P0h0000000000000000000111 11111 1$1(1,1014181<1@1D1H1L1P1T1X1\1`1d1h1l1p1t1x1|1111111111111111111111112 242P2T2X2\2`2d2h2l2p2t2x2|222222222222222222222222222222222333 33333 3$3(3,3034383<3@3D3H3L3P3T3X3\3`3d3h3l3p3t3x3|333333333333333333334 44444 4$4(4,4044484<4@4D4H4L4P4T4X4\4`4d4h4l4p4t4x4|44444444444444444444444555 55555 5$5(5,5054585<5@5X5p5555555666 66666 6$6(6,6064686<6@6D6H6L6P6T6X6\6`6d6h66666666667@7D7H7L7P7T7X7\7`7d7h7l7p7t7x7|777777777777777777777777777777777888 88888 8$8(8,8084888<8@8D8H8L8P8T8X8\8p888888888888888888888888888888999 99999 9$9(9,9094989<9@9D9H9L9P9T9X9\9`9d9h9l9p9t9x9|999999999999999999999999999999999::: ::::: :$:(:,:0:4:8:<:@:D:H:L:P:T:X:\:`:d:h:p::::::::::::::::;;; ;;;;; ;$;(;,;0;4;8;<;@;D;H;L;P;T;X;\;`;d;h;l;p;t;x;|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<< <<<<< <$<(<,<0<4<8<<<@>> >>>>> >$>(>,>0>4>8><>@>X>l>p>>>>>>>??? ????? ?$?(?,?0?4?8?r>y>>>>??F?M????????p00E0x00"1)151@1R1h1n1s1z113444s66677778!848<8x8~88 9X9j999999<:`:::::!;+;{;;E<`<<<<<<<==R=[=g======== >>>%>f>y>>>|?? 00G0S0s00001 1&1+1b1x111111122(212=2E2U22222222?3~333/4A4t4444444'5I5s5555566C7N7g7q7m8x88>9999=:t::::::;;+;6;\;k;};;;;#<`X>>????0$050X0_0e3s333c45556U6x666H7N7e7777889'9+9/93979;9?9C9G9K99%:8:<:@:D:H:L:P:T:X:\:x::;;;;;";&;*;.;2;=;C;<=&=>>>?s?????,0O0r00000!1D1s1112!2G22233!455c66666667F7i7u777778"8D88888 999$9J9S9\9e9z999999:C:M:q:::;;;3;];;;;<<,A>>>>>>?3?o????0-0P00,1R11111232L2\2222222@3D3H3L3s33333C4y4445!5-5C55556`6i6y66666666667"7B77777798B8v88889x9999::s:::::;;T;u;;; >>> ?C?Q?z??d0q0}001M3S3n33333333444e4444y56M778999:V:~:;/<_<<<`==>K>>??h00"1112 3a444N5555 66"686667$7.7E7f7}77778$808G8j888889z;<.a?44S6}6=a=@!1]1t155566v78)99:#::;;n<<=#>D>~>>?0?m??|0P0222223?4M4Y4f44444|556$6/6;6Z6f6q6}6666637d8F99::;;;<#>>,0:0[0233;3L3^3{34 5K555 66w66X77777738;8D8M888889[9d99999@:\::::L;;p<<=S=~===>>2??? LM0|001.111 2[2j22334*567888o9y999:::<;U;;;==0hV0h0001 1I12J2577R7708>8\888$949@9H9g9999999 :::E:6;=;Q>O?~?????@<000001'1D1j11C22q333334]7d7$8866666'7_77777O8`88889^9{9:=:^:q:x:::;;;%;<>=>>>V>t>x>}>>>>>>>>>>>>>>>>>X??pL/0:0A0051<1C1K1h1 22222C3333334T4`4f4u44555'5:;;O>@1k11111(242U2~222233Q3a3m3333314444445X5]5 686U666 77L7g7778%8888889Z99:&:y::;L;]b>|>>> ?U?o???0T0011112=2v2222>3V33333444.5H55555"6n6}6667k7t7777m888F99$::::::::;,;D;e;;;<6<<<< =6=T=r==== >#>@>M>a>p>>>> ?6?k?????0)0G0001X1~1112-2G2234445555558U8[8d9r999L:b:;#;<= =#=O=j====> >/>5>h>p>>>>>>>>C??????? 0-0a0000001>1J1m111F2y2383K3S333334H4M4455u5555;6Y66667 7#7O7j77778 8-8;8c8888*99::U:::H;;<<Q>>>/?y???????0D0K0R0Y0`0g0y032Q2a2m2222233334443444444_555556J6k6667S7q7777-8888999#:A:Q:]:s::::;.;5;B;e;;;;;;;<<<#<,<@>>>> ?;?A?e?l??00031Q1a1m111112:2~222223(454x4445J55555506966667 7707'8888809N9\9p9z999:):2:?:`:::::;E;K;Z;`;<*<3&>,>>>? ?#??????t0;0]0001C1a1q1}1111242W2222244W44 5k7K;Q;S=q=====>>Y>>>>>>??#?8?E?^?v?{??????Pp0y0000U1}11111111 222$2,212T2k222222222222383?3Q3X3]3d3n33q5v5{55555F6R6666666 7777"7(7/767=7D7K7R7Y7a7i7q7}77777777777*8}88o93:Y::::;;%;+;1;7;=;C;^;s;z;;;; >;>C>P>c>l>t>~>>>>>>>>>>>>>>?q?? 00.080A000071A1J1S1h1q111111112/223%3D3R3b3n3z333333333333 44"4.4B4N4Z4f4r4~44446J6W6x6}666666+757C7^7v77788 9^9m9v9999999:6:F:K:^:z::::::;>=>>>N?b?s?? 0!0-090E0p000001B1e11112[2223I3334Y444%5H5k55556P666"7\777+8m8888a99j:::8;[;~;;;; <-=x==>L>o>>>>$?T???? $0T00000131112;2u222g33 4p44%5w55)6L6666.7o777,8~8"99:E:u:::::;;;1;A;;;;;;;;;<><>D>L>X>x>>>>>>>> ???(?H?P?\?|??????????000D0L0T0\0d0l0t000000001141D1P1X1x11111112202<2\2d2l2t2|2222223 3,343<3H3h3p3x33333333 44 4T4d4p444444444445 5<5L5X5|55555555555 66 6@6L6T66666666787H7T7\77777778888$8D8L8T8`888888888899949<9H9P99999999:$:D:P:p:|::::::; ;,;L;X;x;;;;;;;;;< <,<4<< >><>D>L>T>\>d>l>t>|>>>>>>>>>>?(?0?@?d?l?t?|??????????@0 0080@0H0P0\0|00000011141<1D1L1X1|11111111111112222<2D2L2T2\2d2l2x2222222$383H3X3d3l3333344 4<4@4`4444444445555,545H5P5X5`5t5|55555555555555Pt000 00000 0$0(0,0004080<0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x0|000000 1\1112<2\22233T333344 <2