37                              ' + + +   2  2 2  +   &   '  N   N   N     +    + +!" #$%& '() l* + ,-./01234 56789 : ;<=>?@A BCD +E FG +HIJ KLMNOP +Q RS wTUVW wXYZ[\]^_`abcdefghij klmno p q r stuv wxyz{| } q~    ! '@  cn0Lorg/dataone/integration/adapters/CNCallAdapter;mnsLjava/util/List; Signature5Ljava/util/List;v1mnsv2mnsv1v2mns LOG_AGG_WAITJ ConstantValue()VCodeLineNumberTableLocalVariableTablethis\Lorg/dataone/integration/it/testImplementations/LogAggregationFunctionalTestImplementations;getTestDescription()Ljava/lang/String;setup(Ljava/util/Iterator;)Vn#Lorg/dataone/service/types/v1/Node;eLjava/lang/Exception;service&Lorg/dataone/service/types/v1/Service;cap serviceListe1v1mn0Lorg/dataone/integration/adapters/MNCallAdapter;v2mnv1capabilitiesv2capabilitiesmNodecnIterLjava/util/Iterator;cnListmnListLocalVariableTypeTable8Ljava/util/List;9Ljava/util/Iterator; StackMapTable;<(Ljava/util/Iterator;)VgetMNCallAdapterD(Ljava/lang/String;)Lorg/dataone/integration/adapters/MNCallAdapter;certificateFilenameLjava/lang/String;testMnGetLogRecords_AccesslogEntry'Lorg/dataone/service/types/v2/LogEntry;publicPidFoundZtestPersonPidFoundtestRightsHolderPidFounderr errorString mnCnCallermnPublicCallermnTestPersonCallermnTestRightsHolderCallerpublicAccessRule)Lorg/dataone/service/types/v1/AccessRule;testPersonAccessRuletestRightsHolderAccessRule publicPid)Lorg/dataone/service/types/v1/Identifier; testPersonPidtestRightsHolderPidisLjava/io/InputStream;errorsLjava/util/ArrayList; publicLog"Lorg/dataone/service/types/v2/Log; testPersonLogtestRightsHolderLogcnLogPublicPidcnLogTestPersonPidcnLogTestRightsHolderPid)Ljava/util/ArrayList; )RuntimeVisibleAnnotations-Lorg/dataone/integration/webTest/WebTestName;value!getLogRecords() user-based access4Lorg/dataone/integration/webTest/WebTestDescription;Tests that an authenticated user may only view their own records or public records, and that a CN caller may view all records. Note: allowing access to more than the CN is optional for an MN, so authentication failures for non-CN subjects are ignored.testMnQuery_Access&Ljava/io/UnsupportedEncodingException;sysmetaPublicObj-Lorg/dataone/service/types/v2/SystemMetadata;sysmetaTestPersonObjsysmetaTestRightsHolderObjpublicPidEncodedtestPersonPidEncodedtestRightsHolderPidEncodedpublicQueryPublicObjpublicQueryPersonObjpublicQueryRightsHolderObjpublicObjContents LogContents InnerClassesALorg/dataone/integration/ContextAwareTestCaseDataone$LogContents;personObjContentsrightsHolderObjContentstestPersonQueryPublicObjtestPersonQueryPersonObjtestPersonQueryRightsHolderObjtestRightsHolderQueryPublicObjtestRightsHolderQueryPersonObj$testRightsHolderQueryRightsHolderObjcnQueryPublicObjcnQueryPersonObjcnQueryRightsHolderObjMquery() user-based access~Tests that an authenticated user may only view their own records or public records, and that a CN caller may view all records.testCnGetLogRecords_AggregatingmnIdpidiImn logRecordsnumMNs skippedMNsmnCallAdapterspids*Ljava/util/ArrayList;GLjava/util/ArrayList;'getLogRecords() create on MN read on CNwTests the getLogRecords() call. After creating objects on MNs and waiting, verifies that logs are aggregated on the CN.testQuery_Params queryContents pidEncodedtitle titleEncodedauthor authorEncodedqueryResult_idqueryResult_titlequeryResult_authorqueryResult_pidTitleAuthorquery() parametersTests the query() call with different parameters - verifies that a handful of parameters work for filtering down on the created object.testCnGetLogRecords_Access publicObjPidtestPersonObjPidtestRightsHolderObjPid Ljava/lang/InterruptedException;publicLogRecordstestPersonLogRecordstestRightsHolderLogRecordsmnIds.getLogRecords() create on MN test access on CNTests the getLogRecords() call. Assumes that aggregation works, sothe testCnGetLogRecords_Aggregating test should be working. After creating objects on MNs and waiting, verifies that logs returned are based on the identity of the caller. SourceFile0LogAggregationFunctionalTestImplementations.java   sRuns create/read/etc methods agains MNs in the environment and verifies that the corresponding logs end up on a CN.java/util/ArrayList     0Test requires at least one CN, but got zero CNs.   java/lang/StringBuilder Using CN  !org/dataone/service/types/v1/Node  for tests  .org/dataone/integration/adapters/CNCallAdapter 9 v2           java/lang/Exceptionjava/lang/AssertionError#Unable to fetch node list from CN:   .org/dataone/integration/adapters/MNCallAdapterv1    $org/dataone/service/types/v1/ServiceMNCore     )Unable to assess v1 capabilities for MN:  :    )Unable to assess v2 capabilities for MN: MNs available: MN: yTest requires that the environment has at least one MN to work with that supports logging for CN log aggregation. Found: only v1 MN available for use! () libclient used by tests calls the /v1/log and /v2/log endpoint with theidFilter parameter. The v1 MN may still be using the pidFilter parameter! =Not enough (responsive) MNs to test with in this environment.   67"org/dataone/service/util/Constantspublic testPersontestRightsHolder'org/dataone/service/types/v1/AccessRule     !testMnGetLogRecords_Access_public %testMnGetLogRecords_Access_testPerson+testMnGetLogRecords_Access_testRightsHolder      LtestMnGetLogRecords_Access: Unable to get or create a test object with pid:  ,  java/lang/InterruptedException ,org/dataone/service/exceptions/NotAuthorized  Unable to fetch Log records for public subject. Expected a NotAuthorized (only CN or MN admin should have access) but got exception:  Unable to fetch Log records for testPerson subject. Expected a NotAuthorized (only CN or MN admin should have access) but got exception:  Unable to fetch Log records for testRightsHolder subject. Expected a NotAuthorized (only CN or MN admin should have access) but got exception: < Unable to fetch Log records for CN subject. Got exception:  %org/dataone/service/types/v2/LogEntry IPublic subject should have access to public-accessible object we created.QPublic subject should NOT have access to testPerson-accessible object we created.WPublic subject should NOT have access to testRightsHolder-accessible object we created.MtestPerson subject should have access to public-accessible object we created.QtestPerson subject should have access to testPerson-accessible object we created.[testPerson subject should NOT have access to testRightsHolder-accessible object we created.StestRightsHolder subject should have access to public-accessible object we created.[testRightsHolder subject should NOT have access to testPerson-accessible object we created.]testRightsHolder subject should have access to testRightsHolder-accessible object we created. CN subject (?) should have access to public-accessible object we created on . pid: C) should have access to testPerson-accessible object we created on I) should have access to testRightsHolder-accessible object we created on java/lang/String $testMnGetLogRecords_Access ran into  errors: testMnQuery_Access_public_testMnQuery_Access_testPerson_$testMnQuery_Access_testRightsHolder_  procured test object:  on DtestMnQuery_Access: Unable to get or create a test object with pid:  failed to fetch sysmetaUTF-8! "#$java/io/UnsupportedEncodingException=testMnQuery_Access() unable to encode identifiers using UTF-8solr q=identifier: $% &'>, Unable to run solr query for public subject. Got exception: (fQuery run by public subject should retrieve a positive result count for public-created object. For MN fQuery run by public subject should retrieve a zero result count for testPerson-created object. For MN lQuery run by public subject should retrieve a zero result count for testRightsHolder-created object. For MN )ZQuery run by public subject should retrieve result docs for public-created object. For MN bQuery run by public subject should NOT retrieve result docs for testPerson-created object. For MN hQuery run by public subject should NOT retrieve result docs for testRightsHolder-created object. For MN B, Unable to run solr query for testPerson subject. Got exception: jQuery run by testPerson subject should retrieve a positive result count for public-created object. For MN nQuery run by testPerson subject should retrieve a positive result count for testPerson-created object. For MN pQuery run by testPerson subject should retrieve a zero result count for testRightsHolder-created object. For MN ^Query run by testPerson subject should retrieve result docs for public-created object. For MN bQuery run by testPerson subject should retrieve result docs for testPerson-created object. For MN lQuery run by testPerson subject should NOT retrieve result docs for testRightsHolder-created object. For MN H, Unable to run solr query for testRightsHolder subject. Got exception: pQuery run by testRightsHolder subject should retrieve a positive result count for public-created object. For MN xQuery run by testRightsHolder subject should NOT retrieve a positive result count for testPerson-created object. For MN zQuery run by testRightsHolder subject should retrieve a positive result count for testRightsHolder-created object. For MN dQuery run by testRightsHolder subject should retrieve result docs for public-created object. For MN lQuery run by testRightsHolder subject should NOT retrieve result docs for testPerson-created object. For MN nQuery run by testRightsHolder subject should retrieve result docs for testRightsHolder-created object. For MN 6Unable to run solr query for testRightsHolder subject. *+Query run by CN subject (G) should retrieve a positive result count for public-created object on ;) should retrieve result docs for public-created object on testMnQuery_Access ran into  , -: .# testCnGetLogRecords_Aggregating__obj22org/dataone/integration/adapters/CommonCallAdapter/ 01QtestCnGetLogRecords_Aggregating: Unable to get or create a test object with pid:  on MN  (mn #), 2GtestCnGetLogRecords_Aggregating: Should be able to get record for pid:  on originating mn pid: 3call adapter: ?testCnGetLogRecords_Aggregating: Unable to get record for pid:  : got exception: 4Zorg/dataone/integration/it/testImplementations/LogAggregationFunctionalTestImplementationsMtestCnGetLogRecords_Aggregating: waiting for log aggregation: (4.0 minutes)F testCnGetLogRecords_Aggregating: unable to fetch log records for pid  Got exception: 5>testCnGetLogRecords_Aggregating: getLogRecords() call for pid ? should have a total number of results greater than zero on CN  . (waited 6 minutes for log aggregation)1 should contain more than zero log entries on CN )testCnGetLogRecords_Aggregating ran into BtestQuery_Params: Unable to get or create a test object with pid: `"PISCO: Physical Oceanography: moored temperature data: Terrace Point, California, USA (TPT001)""Margaret McManus".testQuery_Params() unable to encode parametersIquery made by as CN should return some results when filtering on pid for B Unable to run solr query with params: identifier. Got exception: q=title:Kquery made by as CN should return some results when filtering on title for = Unable to run solr query with params: title. Got exception:  q=author:Lquery made by as CN should return some results when filtering on author for > Unable to run solr query with params: author. Got exception:  &q=title: &q=author:cquery made by as CN should return some results when filtering on identifier, title, and author for Q Unable to run solr query with params: identifier, title, author. Got exception: testQuery_Params ran into "testCnGetLogRecords_Access_public_&testCnGetLogRecords_Access_testPerson_,testCnGetLogRecords_Access_testRightsHolder_HtestCnGetLogRecords_Access: Unable to get or create a test object on MN HtestCnGetLogRecords_Access: waiting for log aggregation: (4.0 minutes)!log aggregation wait interrupted!N testCnGetLogRecords_Aggregating: unable to fetch log records Got exception: !getLogRecords run by CN subject (J) should retrieve a positive number of results for public-created object ()N) should retrieve a positive number of results for testPerson-created object (T) should retrieve a positive number of results for testRightsHolder-created object ($testCnGetLogRecords_Access ran into 3org/dataone/integration/ContextAwareTestCaseDataonejava/util/Iteratorjava/util/List'org/dataone/service/types/v1/Identifierjava/io/InputStreamjava/lang/Throwable org/dataone/service/types/v2/Log?org/dataone/integration/ContextAwareTestCaseDataone$LogContents+org/dataone/service/types/v2/SystemMetadata,org/apache/commons/collections/IteratorUtilstoList&(Ljava/util/Iterator;)Ljava/util/List;size()Iorg/junit/Assert assertTrue(Ljava/lang/String;Z)Vlog Lorg/apache/commons/logging/Log;append-(Ljava/lang/String;)Ljava/lang/StringBuilder;get(I)Ljava/lang/Object; getBaseURLtoStringorg/apache/commons/logging/Loginfo(Ljava/lang/Object;)V cnSubmitter getSessionA(Ljava/lang/String;)Lorg/dataone/client/rest/MultipartRestClient;e(Lorg/dataone/client/rest/MultipartRestClient;Lorg/dataone/service/types/v1/Node;Ljava/lang/String;)V listNodes)()Lorg/dataone/service/types/v2/NodeList;%org/dataone/service/types/v2/NodeList getNodeList()Ljava/util/List;iterator()Ljava/util/Iterator;hasNext()Znext()Ljava/lang/Object;getType)()Lorg/dataone/service/types/v1/NodeType;%org/dataone/service/types/v1/NodeTypeMN'Lorg/dataone/service/types/v1/NodeType;add(Ljava/lang/Object;)ZgetNodeBaseServiceUrl*(Ljava/lang/String;Ljava/lang/Throwable;)Vping()Ljava/util/Date;getCapabilities%()Lorg/dataone/service/types/v1/Node; getServices)()Lorg/dataone/service/types/v1/Services;%org/dataone/service/types/v1/ServicesgetServiceListgetNameequals getVersion getAvailable()Ljava/lang/Boolean;java/lang/Boolean booleanValuejava/lang/ObjectgetClass()Ljava/lang/Class;java/lang/Class getSimpleName getMessage(I)Ljava/lang/StringBuilder;warn)org/dataone/client/v1/types/D1TypeBuilder buildSubject:(Ljava/lang/String;)Lorg/dataone/service/types/v1/Subject; addSubject)(Lorg/dataone/service/types/v1/Subject;)V'org/dataone/service/types/v1/PermissionCHANGE_PERMISSION)Lorg/dataone/service/types/v1/Permission; addPermission,(Lorg/dataone/service/types/v1/Permission;)V getSubjectbuildIdentifier=(Ljava/lang/String;)Lorg/dataone/service/types/v1/Identifier;procureTestObject(Lorg/dataone/integration/adapters/CommonCallAdapter;Lorg/dataone/service/types/v1/AccessRule;Lorg/dataone/service/types/v1/Identifier;)Lorg/dataone/service/types/v1/Identifier;f(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/Identifier;)Ljava/io/InputStream;org/apache/commons/io/IOUtils closeQuietly(Ljava/io/InputStream;)VgetValuejava/lang/Threadsleep(J)V getLogRecords(Lorg/dataone/service/types/v1/Session;Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;)Lorg/dataone/service/types/v2/Log;getLatestRequestUrl*(Ljava/lang/Object;Ljava/lang/Throwable;)VgetLogEntryList getIdentifier+()Lorg/dataone/service/types/v1/Identifier;$org/dataone/service/types/v1/Subject(Lorg/dataone/integration/adapters/CommonCallAdapter;Lorg/dataone/service/types/v1/AccessRule;Lorg/dataone/service/types/v1/Identifier;Ljava/lang/String;Ljava/lang/String;Lorg/dataone/service/types/v1/ReplicationPolicy;)Lorg/dataone/service/types/v1/Identifier; getNodeId.()Lorg/dataone/service/types/v1/NodeReference;*org/dataone/service/types/v1/NodeReferencegetSystemMetadata~(Lorg/dataone/service/types/v1/Session;Lorg/dataone/service/types/v1/Identifier;)Lorg/dataone/service/types/v2/SystemMetadata;java/net/URLEncoderencode8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;querya(Lorg/dataone/service/types/v1/Session;Ljava/lang/String;Ljava/lang/String;)Ljava/io/InputStream;getNumQueryContentsX(Ljava/io/InputStream;)Lorg/dataone/integration/ContextAwareTestCaseDataone$LogContents; existingLogs docsReturned handleFail'(Ljava/lang/String;Ljava/lang/String;)V(I)Vcontains replaceAlljava/lang/IntegervalueOf(I)Ljava/lang/Integer;error-(Ljava/lang/Object;)Ljava/lang/StringBuilder;getCanonicalNamegetTotal(D)Ljava/lang/StringBuilder;!      /*  -+ *Y*Y*Y*Y+ M ,  Y,*Y,YN* :!&":#$ -%W֧(:'YY(*)*- :!":+Y,-:+Y-::: .W/:  01:  :  !> "2: 3 45", 65 78  :A: Y9:; <=; >.W/:  01:  :  !> "2: 3 45" 65 78  : A: Y?:; <=; ># * %W* %W@*%W*%W  * %W* %W Y@* A* :!1": YB˻YC* A*  &E&PS&E1 23!4,617D9p:<>?@?CABEF,G?IBJEMKNRO\P{QRSTUW[XYZY^_`a!b2c=dFeJfMhPlSiUjskjnopqrstuvxz{:|\~l{~#{, RX \N < !, X N U< , !?"!B#E$ %:&'1\()*4\N+ N+ &,1\()-@./01./01d0/)B2$/a ./00/3443330/AB2=30/AB2=$./00/-/7k1./001567 * +Y+*-* +Y+*-* M YD*EF+Y+*,-'YGH" '3NZ89-'&U: |k*IL*KIM*LIN*MI:NYO:KPQRSNYO:LWLTQRSNYO:MWMTQRSUV:WV: XV: : *+Y:+Z:  [M: 'YY\]^ <=; > *:  [ *+ Y: + Z:  [M: 'YY\ ]^ <=; > *: [*+ Y: + Z:  [M: 'YY\ ]^ <=; > *: [_a: Y: : ,]c: B:=: Y,ef<=;>g:- ]c:B:=: Y-eh<=;>g: ]c:C:>: Yei<=;>g:::+]c:=:'YY+ej<=;>*+ ]c:=:'YY+ej<=;>*+ ]c:=:'YY+ej<=;>* 666 k :!B"l:mn6m n6m n6  opW  qpW  rpW666k :!B"l:mn6m n6m n6  spW  tpW  upW666k :!B"l:mn6m n6m n6  vpW  wpW  xpW6@k8k :!""l:mn6= YyTz{+:|]pW6@k8k :!""l:m n6= YyTz}+:| ]pW6@k8k :!""l:m n6= YyTz~+:| ]pW k: :!-":Y:ϻ'YY AH& & UWU_s{&_s{bd&2CFd2CK&d&&4EH&&'19BHRZcis{ )U_jsx{}*/2CFHKMe4EHJc      -038@E M!R"Z%_&b'e(h*+,-./01234567:;<=?@!A$B1C4DAEDFGGLHTIYJaKfLnOqP~QRSRUVWVYZ[$\1]4\7_<`iar`vcydefgfijkjmno#pAqjs0> > }> 8M898J880;<=>?>|@>0;<b=>e?>h|@>0;<=>?>|@>;<$;<;<#A9dB9kcC!\D!UE!MF!'DGHB)IHcJHKLML NL OP QR ST 29UTVTWTXTYTq=>v?>y@>* QZ -A .4444[[[\\\]2^ [2^ [2^ H_.4444[[[\\\]`abD29.4444[[[\\\]`aabD29.4444[[[\\\]`aaabD2:.4444[[[\\\]`aaaaaa29S29S29.4444[[[\\\]`aaaaaa/%c .4444[[[\\\]`aaaaaa/%c .4444[[[\\\]`aaaaaa/%c /%>/%>/%>1/3(defsghfsij X$ *IL*KIM*LIN*MI:NYO:KPQRSNYO:LWLTQRSNYO:MWMTQRSV:V: V: *+K: Y]+C: 'YY]^ <=; > *LW*+ LTz: Y ]+C: 'YY ]^ <=; > *MW*+ MTz: Y ]+C: 'YY ]^ <=; > *: : : +: + : + : : g:::]: ]: ]::'Y*Y:::::::,Y::,Y::,Y::;:'YY,e<=;>H,Y,:|]pW,Y,:| ]pW,Y,:| ]pW,Y,:|]pW,Y,:| ]pW,Y,:| ]pW:::-Y::-Y::-Y::;:'YY-e<=;>H,Y-:|]pW,Y-:| ]pW,Y-:| ]pW,Y-:|]pW,Y-:| ]pW,Y-:| ]pW:::Y::Y::Y::<:'YYe<=;>H-Y:|]pW-Y:| ]pW-Y:| ]pW-Y:|]pW-Y:| ]pW-Y:| ]pW::: +Y::+Y::+Y:  ::!*+e=YTz+:|]pW=YTz+:|]pWk:!:""!-"":#Y!#:!ϻ'YYA!H &]`&&7RU&l(+&&h&H&z{|}'19BHRZcis{/]`bt.147@IRUWcfilx!(+-Fck#'/KTX`|9A]fjr!*. 6 R [ _ beh8AE M!j"s!w#$%$()*)+,- , ./20;/?3B4E5H7e8l9:;<?=>BCD C Q R :S CR G[ O\ S] p^ _ a,> b> > W  k-667 ! pA9# SdB9!  C! D! E! F!' GHB vIHc UJH 6KL /ML (NL 1lm 4nm 7om fRp9iOq9lLr9QR sPtPuPvz{z|z,}P)~P&PbVPeSPhPPBvPEsPHpP * QZ-X) .4444[[[\\\2?M2?M2?&.4444[[[\\\2 /.4444[[[\\\111 .4444[[[\\\111`]]]27000000w.4444[[[\\\111`]]]]]]27000000z.4444[[[\\\111`]]]]]]]]]28111111w!.4444[[[\\\111`]]]]]]]]]]]]2 AA1/3(defshfs   k* <YMYN* :!]":**-+Y-pW-+Y,-pWNYO:KPQRSY:6-+:YV:]pW*-YWk: ,pW Y]-+:A¶ <=; > 9_a:6,ę:-+:V:]c: YŶ]ƶ-+:  k k  : YǶȶ Yɶ-ȶ'YYʶ]ƶ-+e˶<̶* ιϸa:Y:6/,ę:*:R: 'YY*ҶӶԶ <=; > * ՚DYֶ׶*)ضٶܶpWkk DYֶݶ*)ضٶܶpWk::!-": Y :ϻ'YY޶AH &|b&b&6Mi jkl<mXnqpqstuwz{|} +Vqvz| <\n<KX|#Aj<Kf 9Ln!MT  LM T2#A9 dB9k aYRPRGHRQR**YPZQZ- &.``/13'[`[ .``[`1\2gH_w .``[`\4a1 .``[`\4a1.``[`\2R_ ` .``[``a2N @@1/3(defshfs N*ILNYOM,KPQ,RS߸VN*+,-YWB:'YY-]^<=;>*:::::-]:::: 'Y *Y: : +Y:  :   Y+epW [K:  Y+e <=; >pW [ :  [ : +Y:  :   Y+epW [K:  Y+e <=; >pW [ :  [ : +Y:  :   Y+epW [K:  Y+e <=; >pW [ : [: +Y:  : Y+epW [K: Y+e<=;>pW [ : [ k: :!-":Y:ϻ'YY AH&.1& &I AIIKIV&V9A&9Aw&.&..0.RT &.13Dpswz~       $= AFISVsz "#$%9*>+A&C'Z(s'w*|+*;=@ABGHCD E"D&G+H.G8O@PDQaRSV3= k $z  4 z$z 4 $z C4 $z4aA9DdB9C!GH&Ls69w29z/9~+9(9QR P VSP P P * QZ -1.4[\2>0 .4[\11111 S`]G2}^ J]G2}^ J]G2}^ ^]G2}^ 1/3(defshfs * <YMYNY:* :!<":-+Y,-pW,pWNYO:KPQRSNYO:LWLTQRSNYO:MWMTQRS6: : : ,: Y V: Y V: Y V: *- YW*- YW*- YW8: pW Y-+: * ϸa: gY:6   ę: : : , : Y V:Y V:Y V:*]: *]: *]: @:'YY*Ҷ<=;>* kC k 6YTz]pW kC k 6YTz]pW kC k 6YTz]pW 4k: :  !- ": Y  : ϻ'YYA Hnq&bN&:N^ _`a%bFc\dpesg|hijklmnopqstuvyz{|8~J\nqs~s5Nbv'HVZoF*9 s3 L L L  ;T T T 9 L5mLNTL A9 dB9  RR%R|GHIHaJHCQR**Z%CQZ-0.```/B_ .```[[[ .```[[[\\\24R_ `.```[[[`aaa1\\\2<GGG .```[[[`1/3(defshfsy wx